问题在于,a
ZoneIdis和a
ZoneOffsetis之间存在差异。要创建一个
OffsetDateTime,您需要一个区域偏移量。但是,a
ZoneId和a之间没有一对一的映射关系,
ZoneOffset因为它实际上取决于当前的夏时制时间。对于ZoneId像“欧洲/柏林”一样的商品,夏季有一个偏移量,而冬季有一个不同的偏移量。
在这种情况下,使用
aZonedDateTime代替会更容易
OffsetDateTime。在解析期间,
ZonedDateTime将正确设置为
"Europe/Berlin"区域ID,并且还会根据要解析的日期有效的夏时制设置偏移量:
public static void main(String[] args) { String datum = "20130419233512"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.of("Europe/Berlin")); ZonedDateTime datetime = ZonedDateTime.parse(datum, formatter); System.out.println(datetime.getZone()); // prints "Europe/Berlin" System.out.println(datetime.getOffset()); // prints "+02:00" (for this time of year)}请注意,如果您确实要使用OffsetDateTime,可以使用
ZonedDateTime.toOffsetDateTime()将转换
ZonedDateTime为
OffsetDateTime。



