代码前需要了解的关于Calendar类的内容:
1、在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 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 }