YYYYwwe分析结果与预期不符

我这样创建了一个DateTimeFormatterBuilder

val customFormatter = new DateTimeFormatterBuilder()
        .appendValue(WeekFields.ISO.weekBasedYear(),4)
        .appendValue(WeekFields.ISO.weekOfWeekBasedYear(),2)
        .appendValue(ChronoField.DAY_OF_WEEK,1)
        .toFormatter()

要解析以下字符串的星期2013014 2015233 2020117,我正在使用:

val weekFields = WeekFields.of(Locale.getDefault())
LocalDate.parse(dateString,customFormatter).get(weekFields.weekBasedYear())

结果如下:

+-------+----+----+---+
|partcol|year|week|day|
+-------+----+----+---+
|2013014|2013|   1|  4|
|2015233|2015|  23|  3|
|2020117|2020|  12|  7|
+-------+----+----+---+

2020的星期将始终比期望值高+1。在这种情况下,我试图解析时间信息以获取weekBasedYearweekOfWeekBasedYearDAY_OF_WEEK

openjdk version "1.8.0_232"
OpenJDK Runtime Environment Corretto-8.232.09.1 (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM Corretto-8.232.09.1 (build 25.232-b09,mixed mode)
tdkimo 回答:YYYYwwe分析结果与预期不符

周方案不同(这就是拥有WeekFields类的全部原因)。您正在使用WeekFields.ISO进行解析,然后使用WeekFields.of(Locale.getDefault())来将各个字段打印回去。有时必须给出不同的结果。

根据ISO,一年的第一周是包含至少新年4天的第一周。我可以在其中第1周是包含1月1日的一周的语言环境中重现您的12周(与分析后的第11周相比,为+1),例如在某些阿拉伯语语言环境(该周从星期六开始)中,情况就是如此(一周从星期日开始)。

我认为解决方案很简单:使用相同的WeekFields对象进行解析和打印(或等效的WeekFields对象)。

,
new DateTimeFormatterBuilder()
        .appendValue(ChronoField.YEAR,4)
        .appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR,2)
        .appendValue(ChronoField.DAY_OF_WEEK,1)
        .toFormatter()

LocalDate.parse(dateString,customFormatter).get(ChronoField.DAY_OF_WEEK)

本文链接:https://www.f2er.com/3082252.html

大家都在问