代码前需要了解的关于Calendar类的内容:

   

 1、在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。CalendargetInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:

     Calendar rightNow = Calendar.getInstance();

得到的结果为:

java.util.GregorianCalendar[time=1602247844439,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=283,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=50,SECOND=44,MILLISECOND=439,ZONE_OFFSET=28800000,DST_OFFSET=0]

very very长的结果,里面的主要内容是啥呢,英语好的朋友根据每个单词的英文应该都能够理解了,而我的准确时间应该是:2020-10-09  星期五  20:50:44,而在粉红色记号中会发现,上面写的是9月9日 星期四。

为啥是这样呢?因为在Java中,Month 值是基于 0 的,例如:0 表示 January(1月);而一周呢是从周日开始的,所以1表示Friday。

因此当运行 Calendar rightNow = Calendar.getInstance();  输出时,得到的月份和星期数是有差异的。

那我们如何将它换成我们自己常用的格式呢,使用

System.out.println(calendar.get( Calendar.YEAR)+"年 "
                         + (   calendar.get( Calendar.MONTH) +1     ) +"月"
                         + calendar.get( Calendar.DAY_OF_MONTH ) +"日 "
                         + calendar.get( Calendar.HOUR_OF_DAY ) +'':''+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)

                        + " 星期 "+(   calendar.get(  Calendar.DAY_OF_WEEK ) -1 )    );

就可以得到:

  2020年 10月9日        21: 23: 13       星期 5

         2、Calendar 类是一个抽象类,这就意味着我们使它时不能实例化它,意思就是不能直接new 它,只能对它的子类进行实例化,我们已知它的子类为:GregorianCalendar 

正式开始程序:

 1 package com.zrx.case02;
2
3 import java.util.Calendar;
4 import java.util.Scanner;
5
6 public class Test02 {
7
8 public static void main(String[] args) {
9 Calendar calendar = Calendar.getInstance();
10 // System.out.println(calendar);
11 System.out.println(calendar.get(Calendar.YEAR)+"年 "
12 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
13 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
14 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
15 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
16
17 //修改年份
18 calendar.set(Calendar.YEAR, 2017);
19 System.out.println(calendar.get(Calendar.YEAR)+"年 "
20 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
21 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
22 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
23 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
24
25 //根据日历规律
26 calendar.add(Calendar.YEAR, 3);
27 System.out.println(calendar.get(Calendar.YEAR)+"年 "
28 + ( calendar.get(Calendar.MONTH) +1 ) +"月"
29 + calendar.get(Calendar.DAY_OF_MONTH) +"日 "
30 + calendar.get(Calendar.HOUR_OF_DAY) +": "+calendar.get(Calendar.MINUTE) +": "+calendar.get(Calendar.SECOND)
31 + " 星期"+( calendar.get(Calendar.DAY_OF_WEEK) -1 ));
32
33 System.out.println("--------------------------------------------------------------------------");
34
35
36 //完成万年历
37 Scanner sc = new Scanner(System.in);
38 int year = 0;
39 int month = 0;
40 do {
41 System.out.println("请输入年份:");
42 year = sc.nextInt();
43 }while(year<1970);
44 do {
45 System.out.println("请输入月份:");
46 month = sc.nextInt();
47 }while(month<1 || month>12);
48
49 Calendar c = Calendar.getInstance();
50 c.set(Calendar.YEAR, year);
51
52 c.set(Calendar.MONTH, month); //此时month要多一个月,因为从0开始
53 c.set(Calendar.DAY_OF_MONTH, 1); //则为下个月的一号
54
55 c.add(Calendar.DAY_OF_MONTH, -1); //减一天后变为当月的最后一天
56 int days = c.get(Calendar.DAY_OF_MONTH); //获取当月的天数
57
58 //设置当前月份的一号
59 c.set(Calendar.DAY_OF_MONTH,1);
60 //获取1号是星期几
61 int weekDay = c.get(Calendar.DAY_OF_WEEK);
62 //按格式输出日历
63 System.out.println("周天\t周一\t周二\t周三\t周四\t周五\t周六\t");
64 for(int i = 2; i<=weekDay;i++) {
65 System.out.print("\t");
66 }
67 for(int i = 1; i<=days ;i++) {
68 System.out.print(i+"\t");
69 if( (( i+weekDay) -1)%7 == 0 ) {
70 System.out.println();
71 }
72 }
73 }
74 }

---在学习使用Java中各位大佬已经写好的类包的遇见啥不会使用的时候,要会灵活运用JDK API帮助文档,可以学到很多简便快捷的方法

                                          ----本次学习文字内容是根据JDK 1.6.0 API帮助文档中文版摘抄总结的。

Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)的更多相关文章

  1. Vue3中defineEmits、defineProps 是怎么做到不用引入就能直接用的

    最近正在将一个使用单文件组件的 Options API 的 Vue2 JavaScript 项目升级为 Vue3 typescript,并利用 Composition API 的优势. 比如,下面这种 ...

  2. 用CLion实现本地方法并给java调用

    众所周知,PHP是世界上最好的语言,java排第二,因为PHP无所不能.但是在某些场景下java还要调用本地方法来提高执行的效率,故java只能排第二.java提供了jni(Java Native I ...

  3. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  4. PAT——不吉利的日期(java中date和Calendar使用)

    题目描述 在国外,每月的 13 号和每周的星期 5 都是不吉利的.特别是当 13 号那天恰好是星期 5时,更不吉利. 现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份. 输入描 ...

  5. Java学习笔记(七)——获取类中方法的信息,java的LinkedList

    [前面的话] 在实际项目中学习知识总是最快和最有效的,既能够较好的掌握知识,又能够做出点东西,还是简单的知识总结,最近一直在总结笔记,写的东西还是比较水,希望慢慢可以写出一些干货. 学习过程中的小知识 ...

  6. JAVA基础——Date和Calendar类

    1计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); //yea ...

  7. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  8. 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包

    090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  9. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

随机推荐

  1. DIY申请达姆施塔特工业大学计算机专业(Informatik)硕士(Master)【附个人简历和动机信】

    1.个人概况 双非院校本科毕业两年,已来德国一年. APS绩点2.5,均分80.17. 2020.6月考出5443德福成绩,7月中下旬递交材料,9月初获得Zulassung(录取) PS:后来考出54 ...

  2. 剑指 Offer 44. 数字序列中某一位的数字

    题目描述 数字以0123456789101112131415-的格式序列化到一个字符序列中.在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等. 请写一个函数,求任意第n位 ...

  3. [bash]查找指定目录下符合格式的txt文件

    需求: 查找指定目录下符合yyyy-MM-dd(-b)NNN.txt格式的文件,如“2020-03-22-b888.txt” 目标目录内容: [root@localhost bashs]# ll /r ...

  4. 执行Python程序出现“SyntaxError: Non-UTF-8 code starting with '\xb6'...”错误怎么办?

    如果文件中有中文,直接执行python xx.py会出现以下错误: SyntaxError: Non-UTF- code starting with '\xb6' in file XX.py on l ...

  5. i春秋公益赛之signin

    题目链接:https://buuoj.cn/challenges#gyctf_2020_signin 查看程序保护 只开了canary和NX保护,在IDA查看反编译出来的为代码时发现程序给了一个后门 ...

  6. JavaScript函数及面向对象

    函数及面向对象 目录 函数及面向对象 1. 定义函数 1. 定义方式一 2. 定义方式二 2. 调用函数 1. 参数问题 2. arguments 3. rest 3. 变量的作用域 1 . var的 ...

  7. 开发一个渐进式Web应用程序(PWA)前都需要了解什么?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://dzone.com/articles/how-to-build-a-progres ...

  8. Kubernetes K8S之Pod跨namespace名称空间访问Service服务

    Kubernetes的两个Service(ServiceA.ServiceB)和对应的Pod(PodA.PodB)分别属于不同的namespace名称空间,现需要PodA和PodB跨namespace ...

  9. range如何倒序

    for j in range(3,-2,-1): 表示对3进行每次加-1的操作,直到-2,但不包括-2 print(j) 打印出3 2 1 0 -1都换行展示的

  10. ES6重度学习 demo实例

    let 与 const // 并非真正的常量 // const 的本质: const 定义的变量并非常量,并非不可变, // 它定义了一个常量引用一个值.使用 const 定义的对象或者数组,其实是可 ...