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

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

   Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)_第1张图片

   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]

 

 Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)_第2张图片

 

 

    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写好的包中的类的方法))