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);