按照要求,我的代码应该将ZonedDateTime参数中的日期和OffSetTime参数中的Time附加为以下格式:“ yyyy-MM-dd HH:mm:ss.SSSz”。但是,我无法实现
我已经尝试过多种方法,包括以下使用DateTimeFormatter的方法。
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2019-05-23T09:00:00-05:00");
OffsetTime offsetTime = OffsetTime.parse("08:59:00-05:00");
LocalDateTime localDateTime = LocalDateTime.of(zonedDateTime.toLocalDate(), offsetTime.toLocalTime());
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSz");
String finalDate = localDateTime.format(formatter);
我注意到: -代码在localDateTime.format(formatter)处抛出“ java.time.DateTimeException:无法提取值:类java.time.LocalDateTime”
期望是像这样获得String中的DateTime-“ 2019-05-23T08:59:00.000Z”
任何帮助表示感谢,谢谢您的宝贵时间。
答案 0 :(得分:1)
四个问题:
LocalDateTime
没有任何时区信息,所以请不要使用它。
即使这样做,您的输入也只有一个时区 offset ,而不是一个完整的时区,因此格式化字符串不能使用z
,因为这需要一定的时间区域名称。请改用XXX
。
由于输入偏移-05:00
,因此不应期望使用Z
(Zulu)输出,因为这意味着+00:00
,除非您还希望调整时间5小时之内。
年份的格式模式应使用uuuu
,而不是yyyy
。参见uuuu
versus yyyy
in DateTimeFormatter
formatting pattern codes in Java?
假设您要保留时区,请将代码更改为:
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2019-05-23T09:00:00-05:00");
OffsetTime offsetTime = OffsetTime.parse("08:59:00-05:00");
OffsetDateTime offsetDateTime = zonedDateTime.toLocalDate().atTime(offsetTime);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSXXX");
System.out.println(offsetDateTime.format(formatter));
2019-05-23 08:59:00.000-05:00
如果您想调整Zulu时间(即UTC),请添加行以进行调整:
OffsetDateTime offsetDateTime = zonedDateTime.toLocalDate().atTime(offsetTime)
.withOffsetSameInstant(ZoneOffset.UTC);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSXXX");
System.out.println(offsetDateTime.format(formatter));
2019-05-23 13:59:00.000Z