简介
本文介绍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
请先
!