首页 > 编程笔记

Java Calendar类的用法

实际开发中对日期的使用是必不可少的,比如显示系统时间,图书管理系统显示借书日期、还书日期提示等,Java 对日期的使用也提供了良好的封装,主要包括 java.util.Date 和 java.util.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

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。