我创建了这样的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)

最佳答案

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

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

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

关于java - YYYYwwe分析结果与预期不符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58911618/

10-11 12:38