简介
本文介绍JDK8的一个新日期类型:OffsetDateTime。
它表示一个日期-时间,包含时区偏移量。它比LocalDateTime就多了一个时区,其他用法都一样。
用法
与LocalDateTime互转
LocalDateTime -> OffsetDateTime
package com.example.a;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Demo {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now();
// 1、-4地方的时间
System.out.println(OffsetDateTime.of(localDateTime, ZoneOffset.ofHours(-4)));
// 方式2
System.out.println(localDateTime.atOffset(ZoneOffset.ofHours(-4)));
// 2、北京时间对应的-4地方的时间点
System.out.println(OffsetDateTime.ofInstant(localDateTime.toInstant(ZoneOffset.ofHours(8)), ZoneOffset.ofHours(-4)));
}
}
结果
2023-09-06T14:20:37.291-04:00 2023-09-06T14:20:37.291-04:00 2023-09-06T02:20:37.291-04:00
OffsetDateTime -> LocalDateTime
package com.example.a;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Demo {
public static void main(String[] args) {
OffsetDateTime offsetDateTime = OffsetDateTime.of(LocalDateTime.now(), ZoneOffset.ofHours(-4));
System.out.println(offsetDateTime);
// 转为LocalDateTime 注意:时间还是未变的哦
System.out.println(offsetDateTime.toLocalDateTime());
}
}
结果
2023-09-06T14:22:04.324-04:00 2023-09-06T14:22:04.324
格式化
package com.example.a;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Demo {
public static void main(String[] args) {
OffsetDateTime now = OffsetDateTime.now();
// 使用自带的格式
System.out.println(DateTimeFormatter.ISO_ZONED_DATE_TIME.format(now));
//或者:
System.out.println(now.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
// 自定义格式
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX").format(now));
}
}
结果
2023-09-06T14:08:23.034+08:00 2023-09-06T14:08:23.034+08:00 2023-09-06T14:08:23+08:00
解析
package com.example.a;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Demo {
public static void main(String[] args) {
String dateTimeString = "2023-09-06T14:30:45+08:00";
// 创建自定义的 DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
// 解析字符串为 OffsetDateTime
OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateTimeString, formatter);
}
}
结果
2023-09-06T14:30:45+08:00

请先 !