时光机器 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 需要引入所属的包,位于 java.util.Calendar
。
结束语
常用的日期、时间相关的功能就介绍这些,如果有时间老白会继续研究总结。 下一篇文章开始讨论 Java 的另一个重要内容:异常处理。 异常处理是保障代码健壮的重要手段,是编写代码不可或缺的环节。 请保持关注,老白一如既往地为大家分享 Java 中有趣的内容。
《 上一篇 日期 / 时间格式化 |
---|