OffsetDateTime 是在 JDK8 中引入的,用于替代 java.util.Date
。
Date 与 OffsetDateTime
维度 | Date | OffsetDateTime |
---|---|---|
起始版本 | JDK1.0 | JDK8 |
安全性 | 非线程安全 | 线程安全 |
精度 | 毫秒 | 纳秒 |
toString() 格式 | 根据操作系统不同而不同 | ISO-8601 |
时区 | 不支持 | 支持时区 |
private static void print(){
System.out.println(new Date());
System.out.println(OffsetDateTime.now());
}
将 Date 与 OffsetDateTime 打印在控制台:
Sat Apr 02 22:02:03 CST 2022
2022-04-02T22:02:03.822+08:00
Date 转 OffsetDateTime
将Date转换为OffsetDateTime非常简单。如果我们的日期是 UTC,我们可以用一个表达式来转换它:
Date date = new Date();
OffsetDateTime offsetDateTime = date.toInstant()
.atOffset(ZoneOffset.UTC);
如果原始Date不是 UTC,我们可以提供偏移量,假设我们的原始日期是 +8:00
offsetDateTime = date.toInstant()
.atOffset(ZoneOffset.ofHoursMinutes(8, 0));
OffsetDateTime 提供了许多可以在以后使用的有用方法。例如,我们可以简单地 getDayOfWeek()、getDayOfMonth() 和 getDayOfYear() 。用 isAfter 和 isBefore 方法比较两个 OffsetDateTime 对象也很容易。