8

如何使用Joda-Time获得特定年份的最大周数?

4

3 回答 3

12
new DateTime().withYear(PARTICULAR_YEAR).weekOfWeekyear().getMaximumValue();

@cody 评论

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

例子

new DateTime().withDate(2011, 1, 2);   

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


new DateTime().withDate(2011, 1, 3);

3/1/2011       : Monday, first day of first week of 2011 (3/1/2011 - 9/1/2011)
dayOfWeek      : 1
weekOfWeekyear : 1
weekyear       : 2011
于 2011-06-09T02:06:17.103 回答
5

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

new DateTime().withYear(2014).weekOfWeekyear().getMaximumValue();

如果您在2014 年 12 月 28 日运行上述程序,您将获得正确的值52。然而,同样的代码在一天后的2014 年 12 月 29 日运行时,将返回53的值。这显然是一个问题,因为给定年份的周数是固定的(更不用说您不希望您的方法仅在某些时候起作用)。您可以通过更改系统日期或使用固定日期而不是new Date().

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

new DateTime().withWeekyear(2014).weekOfWeekyear().getMaximumValue();
                   ^^^^

这将确保您不会在这些罕见的情况下更改一年的增量并获得始终如一的正确结果。

于 2015-03-02T18:54:03.733 回答
0
于 2018-01-01T23:34:36.273 回答