模式DateTimeFormatter
的{{1}}无法格式化已解析的值。
"yyyy_'w'w"
错误是:
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)
为什么会这样?
答案 0 :(得分:1)
模式yyyy
代表year-of-era field。但是according to javadoc,还有uuuu
模式来表示year field(阅读这些链接以查看它们之间的微小差异 - 尽管当前日期没有太大区别)。
问题是:当您使用y
创建格式化程序时,它会使用年代字段,您可以通过以下值看到:
值(的 YearOfEra 下,4,19,EXCEEDS_PAD)
但是在解析时,生成的解析对象(在您的情况下,week
变量)是使用年字段创建的 - 正如您可以通过值看到的那样:
{年 = 2017年,......
格式化程序设置为年度字段。因此,当您尝试格式化week
时,它会尝试从week
变量中获取此字段。由于此字段不存在(week
仅包含年,但不包含年代),因此会抛出UnsupportedTemporalTypeException
。< / p>
解决方案是在格式化程序中使用年字段(u
模式):
val df = DateTimeFormatter.ofPattern("uuuu_'w'w")
println(df)
val week = df.parse("2017_w19")
println(week)
println(df.format(week))
输出将是:
值(的年下,4,19,EXCEEDS_PAD) '_''w'Localized(WeekOfWeekBasedYear,1)
{年 = 2017年,WeekOfWeekBasedYear [WeekFields [SUNDAY,1]] = 19},ISO
2017_w19
请注意,现在格式化程序是使用年字段创建的,format
方法现在尝试从已解析的对象中获取此字段,并且不会抛出任何异常。
答案 1 :(得分:0)
对我来说,你不能使用DateTimeFormatter格式化TemporalAccessor,这是一个时间过于宽泛的界面。首先尝试将其强制转换为DateTime对象。