gpt4 book ai didi

java - DateTimeFormatter 可以解析,但不能为相同的输入格式化

转载 作者:行者123 更新时间:2023-11-29 04:27:07 29 4
gpt4 key购买 nike

模式 "yyyy_'w'w"DateTimeFormatter 无法格式化它已解析的值。

val df = DateTimeFormatter.ofPattern("yyyy_'w'w")
df: DateTimeFormatter = Value(YearOfEra,4,19,EXCEEDS_PAD)'_''w'Localized(WeekOfWeekBasedYear,1)

val week = df.parse("2017_w19")
week: temporal.TemporalAccessor = {Year=2017, WeekOfWeekBasedYear[WeekFields[SUNDAY,1]]=19},ISO

df.format(week)

错误是:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
java.time.format.Parsed.getLong(Parsed.java:203)
java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2540)
java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2179)
java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1746)
java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1720)

这是为什么?

最佳答案

模式yyyy 代表year-of-era field .但是according to javadoc ,还有模式 uuuu 来表示 year field (阅读这些链接以了解它们之间的细微差别 - 尽管对于当前日期而言差别不大)。

问题是:当您使用 y 创建格式化程序时,它使用 year-of-era 字段,正如您从值中看到的那样:

Value(YearOfEra,4,19,EXCEEDS_PAD)

但是在解析时,生成的解析对象(在您的例子中是 week 变量)是使用 year 字段创建的 - 正如您可以通过值看到的那样:

{Year=2017, ...


格式化程序使用 year-of-era 字段设置。因此,当您尝试格式化 week 时,它会尝试从 week 变量中获取此字段。由于此字段不存在(week 仅包含 year,但不包含 year-of-era),它会抛出 UnsupportedTemporalTypeException

解决方案是在格式化程序中使用year 字段(u 模式):

val df = DateTimeFormatter.ofPattern("uuuu_'w'w")
println(df)
val week = df.parse("2017_w19")
println(week)
println(df.format(week))

输出将是:

Value(Year,4,19,EXCEEDS_PAD)'_''w'Localized(WeekOfWeekBasedYear,1)
{Year=2017, WeekOfWeekBasedYear[WeekFields[SUNDAY,1]]=19},ISO
2017_w19

请注意,现在格式化程序是使用 year 字段创建的,format 方法现在尝试从已解析的对象中获取此字段,并且不会抛出任何异常。

关于java - DateTimeFormatter 可以解析,但不能为相同的输入格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45728945/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com