Date和Calendar
Java 标准库提供了两套处理日期和时间的API:
一套定义在
java.util这个包里面,主要包括Date、Calendar和TimeZone这几个类;一套新的API是在 Java 8 引入的,定义在
java.time这个包里面,主要包括LocalDateTime、ZoneDateTime、ZoneId等
为什么会有两套API呢?因为历史遗留原因,旧的API存在很多问题,所以引入了新的API。
Date
java.util.Date是用于标识一个日期和时间的对象,注意与java.sql.Date区分,后者用在数据库中。如果观察Date源码,可以发现它实际上存储了一个long类型的以毫秒表示的时间戳。
Date 的基本用法:
// 获取当前时间:
Date date = new Date();
System.out.println("年份" + (date.getYear() + 1900)); // 必须加上1900
System.out.println("月份" + (date.getMonth() + 1)); // 0~11,必须加上1
System.out.println("日期" + date.getDate()); // 1~31,不能加1
// 转换为String:
System.out.println(date); // Mon Jan 20 11:12:18 CST 2025
// 转换为GMT时区:
System.out.println(date.toGMTString()); // 20 Jan 2025 03:12:18 GMT
// 转换为本地时区:
System.out.println(date.toLocaleString()); // 2025年1月20日 11:12:18Date对象有几个严重的问题:它不能转换时区,除了toGMTString()可以按GMT+0:00输出外,Date总是以当前计算机系统的默认时区为基础输出。此外,我们也很难对日期和时间进行加减,计算两个日期相差多少天,计算某个月第一个星期一的日期等。
Calendar
Calendar可以用于获取并设置年、月、日、时、分、秒,它和Date比,多了一个可以做简单的日期和时间运算的功能。
Calendar获取年月日的方法都变成了get(int field),返回的年份不必转换,返回的月份仍要加1,返回的星期1~7表示周末~周六。
Calendar只有一种方式获取,即Calendar.getInstance(),而且获取到就是当前时间。如果我们想要给它设置成特定的一个日期和时间,就必须先清除所有字段。
利用Calendar.getTime()可以将一个Calendar对象转换为Date对象,然后就可以用SimpleDateFormat进行格式化了。
TimeZone
Calendar和Date相比,它提供了时区转换的功能。时区用TimeZone对象表示:
最后更新于
这有帮助吗?