利用 GregorianCalendar 制作当前月的月历

【0】README

0.1)本文文字总结于 core java volume 1 , 源代码均为原创;
0.2)本文旨在熟悉 GregorianCalendar 日历类,每一天就是一个GregorianCalendar 日历类,一天有很多的日历属性,觉得用它打印一个月份的日历出来很好玩的样子;


【1】直接对源代码的关键步骤进行分析:

  • step1) 首先构造一个日历对象,并用当前的日期和时间进行初始化(这里还设置了日历类的时区和方言):
gc = new GregorianCalendar(TimeZone.getTimeZone("Asia/Chongqing"),Locale.SIMPLIFIED_CHINESE);
  • step2) 调用get方法获得当前的日月
today = gc.get(Calendar.DAY_OF_MONTH);
month = gc.get(Calendar.MONTH); //当前月份
  • step3) 将 gc 设置为当前月的第一天,得到这个月的第一天是星期几以及一周的第一天:
gc.set(Calendar.DAY_OF_MONTH, 1); //设置 gc 为当前月的第一天
weekday = gc.get(Calendar.DAY_OF_WEEK);//这个月的第一天是星期几
firstDayOfWeek = gc.getFirstDayOfWeek(); // 一周的第一天,美国是周日,中国是周一
  • 如果第一天是星期日,变量firstDayOfWeek就是Calendar.SUNDAY , 如果是星期一,就设置为Calendar.MONDAY, 以此类推;(在美国,每个星期的第一天是星期日, 而欧洲是星期一)
  • Hint)如果想看到不同地区程序的输出, 应该在main 方法的第一行中添加如下代码(如ITALY):
Locale.setDefault(Locale.ITALY);
  • step4)获得星期名数组+打印星期
weekdayNames = new DateFormatSymbols().getShortWeekdays();//星期名数组
for(String str : weekdayNames) //打印星期名称数组out.printf("%6s", str);
out.printf("\n");
  • step5)打印前面的缩进空格(空格数==这个月第一天的星期数减去该地区星期的起始计数(美国是星期日,中国是星期一))
 for (int i = 0; i < weekday - firstDayOfWeek; i++)out.printf("%5s", " "); //打印前面的缩进空格
  • step6)正式开始打印日历(只需要注意,当循环到的日历天 属于 该地区星期的起始计数时(美国是星期日,中国是星期一),要换行打印,以及如果日历循环到今天,则多打印一个*号以示区别)
for (int i = 1; i <= 100; i++)
{gc.set(Calendar.DAY_OF_MONTH, i);if(gc.get(Calendar.MONTH) != month)break;if(gc.get(Calendar.DAY_OF_WEEK) == firstDayOfWeek)out.printf("\n");out.printf("%5d", i);if(i == today)out.printf("*");
}

【2】源代码

2.1)download source code: https://github.com/pacosonTang/core-java-volume/blob/master/chapter4/Chapter4Test.java 中的 main1 方法;
2.2)source code at a glance:

public static void main1(String[] args){GregorianCalendar gc;int today;int month;int weekday;int firstDayOfWeek;String[] weekdayNames;      Locale.setDefault(Locale.CHINESE);// 设置方言为 简体中文;gc = new GregorianCalendar(TimeZone.getTimeZone("Asia/Chongqing"),Locale.SIMPLIFIED_CHINESE);// 上行设置日历的时区和方言today = gc.get(Calendar.DAY_OF_MONTH);gc.set(Calendar.DAY_OF_MONTH, 1); //设置 gc 为当前月的第一天weekday = gc.get(Calendar.DAY_OF_WEEK);//这个月的第一天是星期几firstDayOfWeek = gc.getFirstDayOfWeek(); // 一周的第一天,美国是周日,中国是周一month = gc.get(Calendar.MONTH); //当前月份weekdayNames = new DateFormatSymbols().getShortWeekdays();//星期名数组//System.out.println(today + " " + month + " " + weekday + " " + firstDayOfWeek);for(String str : weekdayNames) //打印星期名称数组out.printf("%6s", str);out.printf("\n");for (int i = 0; i < weekday - firstDayOfWeek; i++)out.printf("%5s", " "); //打印前面的缩进空格for (int i = 1; i <= 100; i++){gc.set(Calendar.DAY_OF_MONTH, i);if(gc.get(Calendar.MONTH) != month)break;if(gc.get(Calendar.DAY_OF_WEEK) == firstDayOfWeek)out.printf("\n");out.printf("%5d", i);if(i == today)out.printf("*");}}

【3】打印结果(我是10月31号修改的源代码)

这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyecharts怎么绘制散点图_PyeCharts绘制各种图形

简介PyeCharts 是一个用于生成 Echarts 图表的类库&#xff0c;用其生成的图可视化效果非常棒&#xff0c;而且使用起来非常简单。下面是一些常用图的pyecharts实现方法柱状图bar pye.Bar("柱状图")#新建柱状图bar.add("服装", #图例名称["衬衫"…

junit junit_穿越JUnit流

junit junit关于JUnit 5迁移的好处之一是&#xff0c;您可以在老式模式下运行JUnit 4测试&#xff0c;并且所有内容仍然兼容。 不利的一面是&#xff0c;某些注释和方法在JUnit 4和JUnit 5中具有相同的名称&#xff0c;并且当两组库依赖项都可用时&#xff0c;很容易导入错误的…

被遗忘的软件产品形态

从2010年以后&#xff0c;很多公司开发的软件产品&#xff0c;很少有客户端了&#xff0c;web2.0之后&#xff0c;主流的业务系统基本上都是基于Web去构建业务系统。这几年见到的业务应用系统都是基于Web的构建的。而在To C市场&#xff0c;几乎就没有客户端了&#xff0c;都是…

vue进行判断使用class_vue判断dom的class

vue点击给dom添加class然后获取含有class的dom{{item.name}}{{item2.name}}jschek(index2, index) {this.iac[index2] indexthis.iac this.iac.concat([]);this.checkchose()},checkchose:function(){var chosethisvar chosedomchose.$refs.choseboxconsole.log(chosedom)for…

方法参数的值调用+引用调用+深浅拷贝

【0】README 0.1&#xff09;本文描述源代码均 转自 core java volume 1&#xff0c; 旨在理清值调用引用调用&#xff1b; 【1】参数传递给方法的专业术语&#xff1a; 1.1&#xff09;值调用&#xff1a;它表示方法接收的是调用者提供的值&#xff1b; 1.2&#xff09;引用…

设计模式 工厂方法_工厂方法设计模式

设计模式 工厂方法工厂方法模式是流行的创作设计模式之一。 它并不特别依赖于工厂对象来创建对象。 而是要在同一类中使用单独的方法来创建对象。 Factory Method模式定义了一个用于创建对象的接口&#xff0c;但是让子类决定如何实例化其对象。 每个子类必须定义其Factory方法…

靖江机器人怎么样_铁饭碗不保?靖江可能消失的12大职业!快看有你的工作没?...

原标题&#xff1a;铁饭碗不保&#xff1f;靖江可能消失的12大职业&#xff01;快看有你的工作没&#xff1f;无人飞机、无人驾驶、智能机器人....你能想象这些充满现代感的高科技正在改变我们的生活吗&#xff1f;在科技高速发展的今天人工智能逐渐能够代替人类的部分工作但&a…

MarkdownPad 汉化破解(含下载地址)

转自 http://jingyan.baidu.com/article/ca41422fe209271eaf99ed7c.html MarkdownPad是一个全功能Markdown编辑器的Windows。 【1】MarkdownPad 汉化破解&#xff08;含下载地址&#xff09; 工具/原料 MarkdownPad 2.4 方法/步骤 软件 下载地址&#xff08;本软件为绿色版…

捡对象引流脚本 内容_对象和索引流

捡对象引流脚本 内容我本来要写一篇关于如何将流与每个元素的索引混合的文章&#xff0c;但是Baeldung上的人们已经很好地涵盖了这个主题 &#xff01; 鉴于我是他们编辑团队的一员&#xff0c;我为他们/我们感到自豪。 有趣的是&#xff0c;特别是Streams中的Java函数式编程如…

散列之再散列

【0】README 0.1&#xff09;本文描述总结于 数据结构与算法分析&#xff0c; 但源代码为原创&#xff1b; 0.2&#xff09;为什么写这篇博文&#xff1f; 再散列的代码实现 包括了 解决冲突的方法实现&#xff1b;很有代表性&#xff1b;&#xff08;本源代码采用的解决冲突…

激活策略 查询_5个提问,详细介绍北极星指标的策略框架

北极星指标&#xff08;North Star Metric&#xff09;已经逐渐成为许多公司指导产品发展的重要指标&#xff0c;本文通过五个设问和多个行业案例&#xff0c;系统性地介绍北极星指标这类产品策略框架。如今有非常多的人在谈论和使用北极星指标&#xff08;North Star Metric&a…

变色龙嗅探卡功能_变色龙功能

变色龙嗅探卡功能在《神秘博士》中&#xff0c;卡梅利恩&#xff08;Kamelion&#xff09;角色是一个可以采取任何形式的机器人。 据称&#xff0c;他们使用的物理道具非常麻烦&#xff0c;只有其创建者才能理解&#xff0c;而该创建者并没有帮助纠正它。 因此&#xff0c;Cha…

老人与海好词100英文带翻译_《老人与海》经典语录(英文+译文)

《老人与海》是海明威于1951年在古巴写的一篇中篇小说&#xff0c;于1952年出版。是海明威最著名的作品之一。它围绕一位老年古巴渔夫&#xff0c;与一条巨大的马林鱼在离岸很远的湾流中搏斗而展开故事的讲述。它奠定了海明威在世界文学中的突出地位&#xff0c;这篇小说相继获…

java多态+多态中隐含的问题

【0】RAEDME 0.1&#xff09;本文总结于 core java volume 1&#xff0c; 感觉多态中存在的这个问题很新颖&#xff0c;故分享之&#xff1b; 【1】继承与is-a法则 1.1&#xff09;有一个用来判断是否应该设计为继承关系的规则&#xff1a; 这就是 is-a 规则&#xff0c; 它…

MacOS命令终端(CMD)的快捷键/终端快捷键

文章目录常用删除清屏复制粘贴交互/撤销移动光标查找历史命令使用命令查看历史命令标签页控制命令滚屏常用 快捷键说明Control A跳到本行的行首Control E跳到本行的行尾Control U删除光标前面&#xff08;左侧&#xff09;的所有文字&#xff08;还有剪切功能&#xff09;&…

apache kafka_使用Apache Kafka,Kubernetes和Envoy,Istio,Linkerd的服务网格和云原生微服务...

apache kafka微服务架构不是免费的午餐 &#xff01; 微服务需要解耦&#xff0c;灵活&#xff0c;操作透明&#xff0c;数据感知和弹性。 过去几年的大多数材料仅讨论具有紧密耦合且不可扩展的技术&#xff08;如REST / HTTP&#xff09;的点对点体系结构。 这篇博客文章介绍了…

c++ 箭头符号怎么打_老司机怎么测量三极管管型、管脚和性能?三极管测量此中有深意...

众所周知&#xff0c;三极管具有基极、集电极、发射极三极&#xff0c;另外还有NPN型还有PNP型&#xff0c;那么如何用最快的方法进行三极管测量来确认三极管的管脚和管型。另外&#xff0c;三极管的工作状态是否可以通过三极管测量进行判断&#xff1f;接下来本网整理了老司机…

java强制类型转换

【0】README 0.1&#xff09;本文转自 core java volume 1 &#xff0c;在强制类型转换部分&#xff0c;它提到了 使用 instanceof 以保证 类型成功转换&#xff08;而不是抛出异常&#xff09;&#xff0c;很有看点&#xff1b; 【1】强制类型转换的相关知识点&#xff1a; …

MacBook快捷键

文章目录一、选择文本二、移动光标三、打开特定的目录四、录屏/截屏五、选择输入法六、视窗七、窗口缩放八、检索/搜索九、目录路径十、页面滚动十一、删除/清空回收站十二、显示隐藏文件十三、程序坞十四、关机十五、清理缓存十六、窗口最小化十七、分屏十八、Finder/访达窗口…

php cdi_通过MicroProfile上下文传播增强了CDI上下文和隔板

php cdi当将CDI与异步执行方法&#xff08;例如ManagedExecutorService &#xff0c;传统上不可能访问在原始线程中处于活动状态的所有CDI范围。 MicroProfile Context Propagation可以定义线程执行上下文并将其传递到完成阶段&#xff0c;尽管我们的代码是异步执行的&#xff…