Calendar日历类常见方法

Calendar类

类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar getInstance方法返回一个 Calendar对象,其日历字段已由当前日期和时间初始化:

Calendar calendar = Calendar.getInstance();
calender.set(2021, 2, 2); // 设置年月日

Calendar对象能够生成为特定语言和日历风格实现日期-时间格式化所需的所有日历字段值,例如,日语-格里高里历,日语-传统日历。Calendar定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY

一、通过创建子类初化Calendar类对象

因为Calendar类是抽象类无法实例化,但是它有实现类所以可以通过创建子类初始化Calendar对象。

下图是Calendar实现类结构图。

在这里插入图片描述

通过子类创建初始化对象

Calendar sun = new GregorianCalendar(2021, 1, 2);

二、常见方法

返回值方法名描述
voidadd(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间
booleanafter(Object when)判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。
booleanbefore(Object when)判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。
intcompareTo(Calendar ca)比较两个 Calendar 对象表示的时间值
voidset(int field, int value)将给定的日历字段设置为给定值。
intget(int field)返回给定日历字段的值。
DategetTime()返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
longgetTimeInMillis()返回此 Calendar 的时间值,以毫秒为单位。

三、字段

类型字段名描述
static intYEAR
static intMONTH
static intDATE
static intHOUR_OF_DAY
static intMINUTE
static intSECOND
static intMILLISECON毫秒
static intDAY_OF_MONTH指示一个月中的某天,和DATE一样
static intDAY_OF_WEEK指示一个星期中的某天
static intDAY_OF_WEEK_IN_MONTH指示当前月中的第几个星期
static intWEEK_OF_MONTH指示当前月中的星期数
static intDAY_OF_YEAR指示当前年中的天数
static intWEEK_OF_YEAR指示当前年中的星期数

注意:month是从0开始的,而月份是从1开始的,所以month需要加一。

Calendar calendar = new GregorianCalendar(2023,12,1);
int i = calendar.get(Calendar.MONTH);
System.out.println(i);  						// 输出0,所以设置指定月份时要减一

Calendar now = Calendar.getInstance();  		// 现在日期 2023-11-17
System.out.println(now.get(Calendar.MONTH)); 	// 输出10

三、示例

// 初化Calaendar对象
Calendar future = Calendar.getInstance();
future.set(2021, 2, 2);
Calendar calendar = Calendar.getInstance();
calendar.set(2011, 2, 1);
String futureStr = future.get(Calendar.YEAR) + "-" + future.get(Calendar.MONTH) +
    "-" + future.get(Calendar.DAY_OF_MONTH);
String calendarStr = calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH) +
    "-" + calendar.get(Calendar.DAY_OF_MONTH);
// 判断此 future 表示的时间是否在指定 calendar 表示的时间之后,返回判断结果。
if (future.after(calendar)) {
    System.out.println("future日期" + futureStr + ",在calendar日期" +
                       calendarStr + "之后"); 
}

输出结果:

future日期2021-2-2,在calendar日期2011-2-1之后

compareTo比较器

// compareTo比较器
int i = future.compareTo(calendar);
if (i > 0) {
    System.out.println("future日期" + futureStr + ",在calendar日期" +
                       calendarStr + "之后"); // <--- 输出这个
} else if (i < 0) {
    System.out.println("future日期" + futureStr + ",在calendar日期" +
                       calendarStr + "之前");
} else {
    System.out.println("相等");
}

输出结果:

future日期2021-2-2,在calendar日期2011-2-1之后

转Date类型格式化输出

Calendar sun = new GregorianCalendar(2021, 1, 2);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(sun.getTime()); // 获取Date对象格式化输出
System.out.println(format); 

输出结果:

2021-02-02 00:00:00

注意:我这里设置了日期是 2021-1-2 00:00:00
Calendar日历类月份是从零开始算的,
获取Date类型的时候Date月份会自动加一。
end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值