Joda Time 在 2016 年 1 月 1 日以 201653 的身份返回 yyyyww


DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyyww");
dateTimeFormatter.print(new DateTime(2016, 1, 1, 1, 1).withZone(DateTimeZone.UTC))

返回201653

为什么是2016年的53周而不是2015年?

您要查找的是基于周的年份(符号 x),而不是纪元年份(符号 y)。另请参阅Joda-Time使用的模式语法,该语法与SimpleDateFormat或Java-8的模式语法不同。因此,解决方案应如下所示:

DateTimeFormatter f = DateTimeFormat.forPattern("xxxxww");
String s = f.print(new DateTime(2016, 1, 1, 1, 1).withZone(DateTimeZone.UTC));
System.out.println(s); // 201553

因为1月1日是星期五。在这种情况下,该周算作 2015 年的最后一周,2016 年的第一周将从第一个星期一(1 月 4 日)开始。
这是根据ISO 8601标准实施的:

对第 01 周有几种相互等效和兼容的描述:
- 包含一年第一个星期四的一周(正式的ISO定义),
- 1月4日的一周,
- 第一周,其大部分时间(四天或更多)在开始年份,以及
- 从12月29日至1月4日期间的星期一开始的一周。

相关内容

最新更新