详解Cleandar日历类–下

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

前言

大家好,我是程序猿小白 gw_Gw,很高兴能和大家一起学习进步。
复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍Calendar的实例化方法和方法的解读以及对set,get等方法详细介绍。最后通过实例来更加熟悉Calendar类的使用。
复制代码

建议点击传送门先看上篇:详解Cleandar日历类--上

1.2.2 getInstance(Locale aLocale)

 static Calendar getInstance(Locale aLocale)  使用默认时区和指定语言环境获得一个日历。 
复制代码

参数解析:

Locale 对象表示了特定的地理、政治和文化地区。Locale 类提供了一些方便的常量,可用这些常量为常用的语言环境创建 Locale 对象。例如为中国创建一个Locale对象:Locale.CHINA

实例展示:

 Calendar calendar1 = Calendar.getInstance(Locale.CHINA);
复制代码

常见取值:

image-20211118153855497

image-20211118153913654

1.2.3 getInstance(TimeZone zone)

 static Calendar getInstance(TimeZone zone) 使用指定时区和默认语言环境获得一个日历。 
复制代码

参数解析:

TimeZone 是一个抽象类,表示时区偏移量,也可以计算夏令时。

通常,使用 getDefault 获取 TimeZonegetDefault 基于程序运行所在的时区创建 TimeZone

也可以通过getTimeZone(String ID)指定时区来获取TimeZone

getTimeZone(String ID实例展示:

 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
复制代码

想要指定时区如果不知道地区的时区表示,百度就好。

具体使用:

 Calendar calendar2 = Calendar.getInstance(timeZone);
复制代码

1.2.4 getInstance(TimeZone zone, Locale aLocale)

 static Calendar getInstance(TimeZone zone, Locale aLocale) 使用指定时区和语言环境获得一个日历。 
复制代码

了解了上面的方法,再来理解这个方法就很简单了。这里就不再对参数做解释。

实例展示:

 TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");
 Calendar calendar3 = Calendar.getInstance(timeZone,Locale.CHINA);
复制代码

2.3 Calendar类的方法

2.3.1 add()

 abstract  void add(int field, int amount) 
             根据日历的规则,为给定的日历字段添加或减去指定的时间量。(amount是正就是加,负就是减。)
复制代码

实例展示:

 Calendar calendar = Calendar.getInstance();
 System.out.println(calendar.get(Calendar.MONTH));
 calendar.add(Calendar.MONTH,1);
 System.out.println(calendar.get(Calendar.MONTH));
 calendar.add(Calendar.MONTH,-2);
 System.out.println(calendar.get(Calendar.MONTH));
复制代码

image-20211118184157941

2.3.2 set()

 void set(int field, int value) 
             将给定的日历字段设置为给定值。 
 void set(int year, int month, int date) 
             设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 设定年月日
 void set(int year, int month, int date, int hourOfDay, int minute)  
             设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。  设定年月日时分
 void set(int year, int month, int date, int hourOfDay, int minute, int second) 
             设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 设定年月日时分秒
复制代码

实例展示:

 calendar.set(2019,11,2,11,5,5);
复制代码

2.3.3 get()

 int get(int field) 返回给定日历字段的值。 
复制代码

实例展示:

 int month = calendar.get(Calendar.MONTH);
 System.out.println(month);
复制代码

2.3.4 getTime()

 Date getTime() 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 
复制代码
 Date time = calendar.getTime();
 System.out.println(time);
复制代码

image-20211118184848155

2.3.5 getTimeInMillis()

 long getTimeInMillis() 返回此 Calendar 的时间值,以毫秒为单位。 
复制代码

实例展示:

 long timeInMillis = calendar.getTimeInMillis();
 System.out.println(timeInMillis);
复制代码

image-20211118185004740

2.3.6 setTime()

 void setTime(Date date) 
           使用给定的 Date 设置此 Calendar 的时间。 
复制代码

实例展示:

 calendar.setTime(new Date());
 System.out.println(calendar.getTime());
复制代码

image-20211118185425567

2.3.7 setTimeInMillis()

 void setTimeInMillis(long millis) 
           用给定的 long 值设置此 Calendar 的当前时间值。
复制代码
 calendar.setTimeInMillis(1000000000000L);
 System.out.println(calendar.getTime());
复制代码

image-20211118185728155

3.4 Calendar类的应用实例

需求:统计2021年每个月的21号是星期日的天数。

 public class CalendarTest {
     public static void main(String[] args) {
         Calendar calendar = Calendar.getInstance();
         calendar.set(2021,0,1);
         int count = 0;
         for(int i = 0;i < 12; i++){
             int month = calendar.get(Calendar.MO NTH);
             //获取每个月有多少天
             int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
             //System.out.println(days);
             for(int day = 1;day <= days; day++){
                 int weekDay = calendar.get(Calendar.DAY_OF_WEEK)+1;
                 if(day == 21 && weekDay == 7){
                     count++;
                     //System.out.println(day);
                 }
             }
             calendar.add(Calendar.MONTH,1);
         }
         System.out.println("符合条件的天数共有:"+count+"天!");
     }
 }
复制代码

结语

Calendar类我们就已经学完啦,希望能对读者有所帮助。如果其中有不正之处,欢迎掘友有们留言指正。