Java8 ZonedDateTime 与字符串互相转换

790 阅读2分钟

Java8 中的 ZoneDateTime 格式化

ZoneDateTime

ZonedDateTime是java8中新增的关于时间的处理类。用于表示带时区的日期与时间的信息,对于ZonedDateTime的使用这里不多赘述,本文记录两种常见的ZonedDateTime的格式化方法。

ZonedDateTime 格式化成String

1.格式化成 2021-02-01 20:49:09 格式

ZonedDateTime now = ZonedDateTime.now(); 
System.out.println(now);

输出的结果为: 2021-02-01T20:49:09.949+08:00[Asia/Shanghai]
一般我们展示的应该是 2021-02-01 20:49:09 (也就是yyy-MM-dd HH:mm:ss 格式),那我们看看如果格式化成这种格式

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatStr = ZonedDateTime.now().format(formatter);
System.out.println(formatStr);

输出结果为: 2021-02-01 21:00:05

2.格式化成 2021-02-01 21:12:06 +08
这种格式带时区

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss X");
String formatStr = ZonedDateTime.now().format(formatter);
System.out.println(formatStr);

输出结果为: 2021-02-01 21:12:06 +08

2.格式化成 2021-02-01 21:11:36.255+08
这种格式精确到毫秒

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss SSSX");
String formatStr = ZonedDateTime.now().format(formatter);
System.out.println(formatStr);

输出结果为: 2021-02-01 21:11:36.255+08

String 转 ZonedDateTime

2021-02-01 21:11:36 转 ZonedDateTime

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
ZonedDateTime time = ZonedDateTime.parse("2021-01-31 15:06:32",formatter);
System.out.println(time);

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai")); 中的 withZone(ZoneId.of("Asia/Shanghai")) 不可少因为字符串中并没有指定时区

2021-02-01 21:11:36 +08 转 ZonedDateTime

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
ZonedDateTime time = ZonedDateTime.parse("2021-01-31 15:06:32",formatter);
System.out.println(time);

2021-02-01 21:11:36.255+08 转 ZonedDateTime

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSX");
ZonedDateTime time = ZonedDateTime.parse("2021-02-01 21:11:36.255+08",formatter);
System.out.println(time);