2MUCH

Java基础之Calendar日历类

2022-10-25


Java基础之Calendar日历类

Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置读取日期的特定部分,比如年、月、日、时、分和秒等。

定义方法

Calendar类是一个抽象类,不可以被实例化。

因此,需要使用静态方法getInstance()来得到一个Calendar对象

Calendar calendar = Calendar.getInstance(); // 获取当前日期

获取方法

方法1

可获取字段包括:年、月、日、时、分、秒,需要使用Calendar类中定义的常量值来表示,如Calendar.YEAR用于表示年份。

Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE); // DATE表示日
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
/****执行结果******/
2022年10月25日7时4分37秒

需要特别注意:

在使用Calendar.MONTH字段时,月份的起始值是从0开始的,而不是从1开始,因此要获取当前的月份需要在Calendar.MONTH的基础上加1。

方法2

使用Calendar的getTime()方法,getTime()方法会返回一个表示Calendar时间值的Date对象

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
/******执行结果*******/
Tue Oct 25 07:10:22 CST 2022

设置方法

使用set字段进行设置,有以下三种格式:

方法声明 功能描述
void set(int field,int value) 为指定日历字段设置指定值
void set(int year,int month,int date) 设置Calendar对象的年、月、日三个字段的值
void set(int year.int month,int date,int hourOfDay,int minute,int second) 设置Calendar对象的年、月、日、时、分、秒六个字段的值

格式1:

Calendar calendar = Calendar.getInstance();
System.out.println("当前日期:");
System.out.println(calendar.getTime());
// 指定日历字段进行设置
calendar.set(Calendar.MONTH, 10); // 注意:实际上设置为10+1=11月
calendar.set(Calendar.DATE, 10);
System.out.println("设置方式1:");
System.out.println(calendar.getTime());
/******执行结果*******/
当前日期:
Tue Oct 25 07:19:46 CST 2022
设置方式1:
Thu Nov 10 07:19:46 CST 2022

格式2:

Calendar calendar = Calendar.getInstance();
System.out.println("当前日期:");
System.out.println(calendar.getTime());
// 指定日历字段进行设置
calendar.set(2020,8,19); // 设置为2020年9月19日
System.out.println("设置方式2:");
System.out.println(calendar.getTime());
/******执行结果*******/
当前日期:
Tue Oct 25 07:28:16 CST 2022
设置方式2:
Sat Sep 19 07:28:16 CST 2020

格式3:

Calendar calendar = Calendar.getInstance();
System.out.println("当前日期:");
System.out.println(calendar.getTime());
// 指定日历字段进行设置
calendar.set(2020,8,19,20,19,18); // 设置年、月、日、时、分、秒
System.out.println("设置方式3:");
System.out.println(calendar.getTime());
/******执行结果*******/
当前日期:
Tue Oct 25 07:29:58 CST 2022
设置方式3:
Sat Sep 19 20:19:18 CST 2020

增减日期方法

使用方法void add(int field,int amount),amount为正数表示增加,为负数表示减少。

Calendar calendar = Calendar.getInstance();
System.out.println("当前日期:");
System.out.println(calendar.getTime());
calendar.add(Calendar.DATE,1); // 日+1
calendar.add(Calendar.YEAR,-2); // 年-2
System.out.println("日期增减后:");
System.out.println(calendar.getTime());
/******执行结果*******/
当前日期:
Tue Oct 25 07:33:35 CST 2022
日期增减后:
Mon Oct 26 07:33:35 CST 2020

格式化输出日期方法

采用SimpleDateFormat类:

SimpleDateFormat myFmt=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
SimpleDateFormat myFmt1=new SimpleDateFormat("yy/MM/dd HH:mm");
SimpleDateFormat myFmt2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//等价于now.toLocaleString()
SimpleDateFormat myFmt3=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 E ");
SimpleDateFormat myFmt4=new SimpleDateFormat(
  "一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区");
Calendar calendar = Calendar.getInstance();
System.out.println(myFmt.format(calendar.getTime()));
System.out.println(myFmt1.format(calendar.getTime()));
System.out.println(myFmt2.format(calendar.getTime()));
System.out.println(myFmt3.format(calendar.getTime()));
System.out.println(myFmt4.format(calendar.getTime()));
/******执行结果*******/
2022年10月25日 07时42分34秒
22/10/25 07:42
2022-10-25 07:42:34
2022年10月25日 07时42分34秒 周二 
一年中的第 298 天 一年中第44个星期 一月中第5个星期 在一天中7时 CST时区

参考链接

https://book.itheima.net/course/1265899443273850881/1265900797362954241/1265906995478913025

https://blog.csdn.net/weixin_45732073/article/details/111501550