我需要以week-based-year
- week-of-week-based-year
格式输出当前日期,即使用ISO week date,其中一周始终在星期一开始,而一年的第一周是第一个在1月份至少有四天的时间(所以在1月的第一个星期四这一周)。
自2015年12月31日是星期四,星期五至星期日,即2016年1月1日至3日,均属于2015年第53周("漫长的一年"),以及第一周2016年1月4日星期一开始。
从DateTimeFormatter spec开始,我原本以为我可以使用模式YYYY-ww
来执行此操作(Y
是week-based-year
而w
是{ {1}})。
但是,当我尝试类似以下简化测试用例时:
week-of-week-based-year
我明白了:
String dateString = "2016-01-03"; LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd")); String expectedOutput = "2015-53"; String actualOutput = date.format(DateTimeFormatter.ofPattern("YYYY-ww")); System.out.println("Parsing " + dateString + ", expected " + expectedOutput + " but got " + actualOutput); System.out.println(dateString + " as ISO week date: " + date.format(DateTimeFormatter.ISO_WEEK_DATE));
Parsing 2016-01-03, expected 2015-53 but got 2016-02
因此,使用内置的2016-01-03 as ISO week date: 2015-W53-7
格式化程序可以达到我的预期,但使用模式ISO_WEEK_DATE
似乎可以为我提供日历年和周。
我是否误解了有关ISO周日期的内容,或者我的代码中是否有错误,或者......我敢说...这是YYYY-ww
库中的错误(就像以前一样) this question)?
我知道我可以使用下面的自定义格式化程序解决这个问题,但在我的情况下,我确实需要使用模式来处理它。
java.time