当我运行第一段时,它很好并且生成了输出。但是在第二种情况下,当我运行此细分2时,它会生成

DateTimeException : Unable to extract ZoneId from temporal.


段1:

LocalDate ld = LocalDate.now();
System.out.println(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(ld));


段2:

LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
System.out.println(dtf.format(ldt));

最佳答案

您在混淆“本地化”和“本地”:


ofLocalizedDateTime:返回特定于语言环境的日期时间格式化程序
LocalDateTime:无时区的日期时间


如您所见,它们是两个完全不同的术语。

现在,尝试提供一个ZonedDateTime值,这样您就可以了解为什么它想要一个ZoneId

ZonedDateTime zdt = ZonedDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
System.out.println(dtf.format(zdt));


输出(语言环境:en_US,时区:America/New_York

Monday, December 30, 2019 at 8:09:16 AM Eastern Standard Time


如您所见,它需要时区才能知道时间是“东部标准时间”。

如果将时间样式从FULL减小为MEDIUM,则不再需要时区。

LocalDateTime ldt = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL, FormatStyle.MEDIUM);
System.out.println(dtf.format(ldt));


输出量

Monday, December 30, 2019, 8:09:16 AM

关于java - java.time.DateTimeException:无法从时态中提取ZoneId,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59531046/

10-12 21:46