Bootstrap

【老白学 Java】时光机器 Calendar

时光机器 Calendar

码老白
文章来源:《Head First Java》修炼感悟。

当你查询当前日期和时间时,使用 Date 非常方便,但是诸如「距离某天相差多久」等时间不确定的操作,Date 就显得有些力不从心。 专业的事情还是要由专业的类完成,Java 提供了专门处理日期的类 Calendar。 这个类究竟都有哪些好用的功能呢? 让我们通过本篇文章一探究竟。

获取 Calendar 对象

如果告诉你 Calendar 是个抽象类,你该如何获取它? 好消息是 Calendar 提供了一个静态方法 getInstance(),能够返回它的子类的实例对象,同样可以调用 Calendar 提供的那些神秘方法。 比如:

import java.util.Calendar;
public class TestCalendar {
	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		int year = cal.get(Calendar.YEAR);
		System.out.println("今年是" + year + "年");
	}
}
// 输出结果:今年是2024年

获取到 Calendar 对象后,我们就可以随时使用这个对象引用来处理日历相关的业务逻辑。是不是很方便?

Calendar 常用字段

Calendar 类有大量的字段供我们使用,以下仅列出一小部分:

  • YEAR,表示年份
  • MONTH,表示月份
  • HOUR,表示小时
  • MINUTE,表示分钟
  • SECOND,表示秒
  • MILLISECOND,表示毫秒
  • DAY_OF_YEAR,表示一年中的某天
  • DATE / DAY_OF_MONTH 表示一个月中的某天
  • DAY_OF_WEEK 表示一个星期中的某天
  • HOUR_OF_DAY,表示一天中的某个小时
  • 更多详细信息请参考 API 文档...

Calendar 常用方法

Calendar 类有大量与日历相关的方法,以下仅列出一小部分:

  • add(int field, int amount),为指定字段添加指定的量。
  • getInstance(),返回 Calendar 对象。
  • get(int field),返回当前指定字段的值。
  • set(int field, int value),将当前指定的字段设置为指定值。
  • getTimeInMillis(),返回从 1970年1月1日 00:00:00.000 至今的毫秒数。
  • setTimeInMillis(long millis), 用指定的毫秒值设置当前时间值。
  • roll(int field, int amount),向指定字段添加指定时间量。
  • 更多详细信息请参考 API 文档...

让 Calendar 帮我们计算日历

Calendar 很好用,但是使用前需要了解几个概念:

  • Calendar 使用了大量字段来保存日期和时间,你可以随时设置或者获取它们。
  • Calendar 允许你对日期和时间进行加减,以获取特定日期或时间。
  • Calendar 可以使用毫秒表示时间,当前时间意味着从历元(1970年1月1日 00:00:00:000)至今的毫秒数,可以进行精确的相对时间计算。

Calendar 处理日历很专业,请看范例:

import java.util.Calendar;

// Calendar 范例
public class CalendarExample {

	public static void main(String[] args) {

		// 获取实例对象以及当前时间
		Calendar cal = Calendar.getInstance();
		long day = cal.getTimeInMillis();
		
		// 设置当前时间为 2024年12月15日 14:04
		cal.set(2024, 12, 15, 14, 4);

		// 增加1小时后的时间
		day += 1000 * 60 * 60;
		cal.setTimeInMillis(day);
		System.out.println("new hour " + cal.get(cal.HOUR_OF_DAY) );

		// 增加16天的日期(跨到下月继续计数)
		cal.add(cal.DATE, 16);
		System.out.println("add 16 days: " + cal.getTime());
		
		// 设置为当前月1号
		cal.set(cal.DATE, 1);
		System.out.println("set to 1: " + cal.getTime());
	}
}

编译执行结果:
Calendar范例
老白提醒: 使用 Calendar 需要引入所属的包,位于 java.util.Calendar

结束语

常用的日期、时间相关的功能就介绍这些,如果有时间老白会继续研究总结。 下一篇文章开始讨论 Java 的另一个重要内容:异常处理。 异常处理是保障代码健壮的重要手段,是编写代码不可或缺的环节。 请保持关注,老白一如既往地为大家分享 Java 中有趣的内容。


《 上一篇 日期 / 时间格式化
;