Java Calendar类的用法
实际开发中对日期的使用是必不可少的,比如显示系统时间,图书管理系统显示借书日期、还书日期提示等,Java 对日期的使用也提供了良好的封装,主要包括 java.util.Date 和 java.util.Calendar。
借助 Date 类,我们可以获取当前系统时间,但是功能也仅限于此。如果需要对日期数据进行逻辑操作,如计算从当前时间算起 15 天后的日期是几月几号,Date是没有计算能力的。如果手动来编写逻辑代码又会比较复杂,需要考虑的因素很多,如本月有多少天,如果是 2 月还需要考虑闰月的情况,如果时间很长涉及跨年就更为复杂。
每当我们遇到一个比较复杂的功能时,都会发现 Java 已经提供了一个封装好的工具类可以帮我们完成业务代码,这里也不例外,我们可以通过 Calendar 类来完成日期数据的逻辑运算。
使用 Calendar 进行日期运算的基本思路是先将日期数据赋给 Calendar,再调用 Calendar 的方法来完成相关运算,我们首先介绍如何将日期数据赋给 Calendar 类。
Calendar 类提供了很多静态常量,用来记录日期数据,常用的静态常量如下表所示。
Calendar 常用方法的描述如下表所示。
Calendar 的具体操作参照下面的实例程序:
借助 Date 类,我们可以获取当前系统时间,但是功能也仅限于此。如果需要对日期数据进行逻辑操作,如计算从当前时间算起 15 天后的日期是几月几号,Date是没有计算能力的。如果手动来编写逻辑代码又会比较复杂,需要考虑的因素很多,如本月有多少天,如果是 2 月还需要考虑闰月的情况,如果时间很长涉及跨年就更为复杂。
每当我们遇到一个比较复杂的功能时,都会发现 Java 已经提供了一个封装好的工具类可以帮我们完成业务代码,这里也不例外,我们可以通过 Calendar 类来完成日期数据的逻辑运算。
使用 Calendar 进行日期运算的基本思路是先将日期数据赋给 Calendar,再调用 Calendar 的方法来完成相关运算,我们首先介绍如何将日期数据赋给 Calendar 类。
Calendar 类提供了很多静态常量,用来记录日期数据,常用的静态常量如下表所示。
常 量 | 描 述 |
---|---|
public static final int YEAR | 年 |
public static final int MONTH | 月 |
public static final int DAY_OF_MONTH | 天,以月为单位,即当天是该月中的第几天 |
public static final int DAY_OF_YEAR | 天,以年为单位,即当天是该年中的第几天 |
public static final int HOUR_OF_DAY | 小时 |
public static final int MINUTE | 分钟 |
public static final int SECOND | 秒 |
public static final int MILLISECOND | 豪秒 |
Calendar 常用方法的描述如下表所示。
方法 | 描述 |
---|---|
public static Calendar getlnstance() | 获取系统对应的 Calendar 实例化对象 |
public void set(int field, int value) | 给静态常量赋值 |
public int get(int field) | 取出静态常量 |
public final Date getTime() | 获取 Calendar 对应的 Date 对象 |
Calendar 的具体操作参照下面的实例程序:
public class CalendarTest { public static void main(String[] args) { //计算2018年8月6日所在的周是2018年的第几周 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2018); //1月为0,因此8月为7 calendar.set(Calendar.MONTH, 7); calendar.set(Calendar.DAY_OF_MONTH, 6); int week = calendar.get(Calendar.WEEK_OF_YEAR); System.out.println("2018年8月6日所在的周是2018年的第"+week+"周"); //计算2018年8月6日往后推21天的日期 calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + 21); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String laterDateStr = simpleDateFormat.format(calendar.getTime()); System.out.println("2018年8月6日21天之后的日期:"+laterDateStr); //计算2018年8月6日往前推21天的日期 calendar.set(Calendar.YEAR, 2018); calendar.set(Calendar.MONTH, 7); calendar.set(Calendar.DAY_OF_MONTH, 6); calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 21); String frontDateStr = simpleDateFormat.format(calendar.getTime()); System.out.println("2018年8月6日21天之前的日期:"+frontDateStr); } }运行结果为:
2018年8月6日所在的周是2018年的第32周
2018年8月6日21天之后的日期:2018-08-27
2018年8月6日21天之前的日期:2018-07-16