lsc*_*hin 12

new DateTime().withYear(PARTICULAR_YEAR).weekOfWeekyear().getMaximumValue();
Run Code Online (Sandbox Code Playgroud)

@cody评论

两种方法的区别 .withWeekOfWeekyear().withWeekyear()

new DateTime().withDate(2011, 1, 2);   
Run Code Online (Sandbox Code Playgroud)

2/1/2011       : Sunday, last day of last week of 2010 (27/12/2010 - 2/1/2011)   
dayOfWeek      : 7
weekOfWeekyear : 52  
weekyear       : 2010
Run Code Online (Sandbox Code Playgroud)


new DateTime().withDate(2011, 1, 3);
Run Code Online (Sandbox Code Playgroud)

3/1/2011       : Monday, first day of first week of 2011 (3/1/2011 - 9/1/2011)
dayOfWeek      : 1
weekOfWeekyear : 1
weekyear       : 2011
Run Code Online (Sandbox Code Playgroud)


jsa*_*awo 5

我知道回答这么老的问题是一种死灵法术,但接受的答案(由 lschin 提供)有一个错误 - 虽然大多数情况下它会返回正确的值,但有时会返回错误的值,具体取决于执行计算的时间. 例如:

new DateTime().withYear(2014).weekOfWeekyear().getMaximumValue();
Run Code Online (Sandbox Code Playgroud)

如果您在2014 年 12 月 28 日运行上述代码,您将获得正确的52值。但是,在一天后,即2014 年 12 月 29 日运行相同的代码时,将返回53的值。这显然是一个问题,因为给定的一年有固定的周数(更不​​用说你不希望你的方法只在某些时候工作的事实)。您可以通过更改系统日期或使用固定日期而不是 来测试这一点new Date()

这里的问题是weekOfWeekyear(),如果new DateTime()碰巧返回接近年终的日期,它可以增加给定的年份值。当当前和下一年的周数相同时,这不是问题,否则就会成为问题。因此,要纠正此问题,请使用:

new DateTime().withWeekyear(2014).weekOfWeekyear().getMaximumValue();
                   ^^^^
Run Code Online (Sandbox Code Playgroud)

这将确保您不会在极少数情况下每年更改增量并获得始终正确的结果。

  • 应该是`new DateTime().withWeekyear(2014).weekOfWeekyear().getMaximumValue();` 注意withWeekyear; y 是小写。 (2认同)