当我运行第一段时,它很好并且生成了输出。但是在第二种情况下,当我运行此细分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/