我从日历对象中获取WEEK_OF_YEAR时遇到问题

我从日历对象中获取WEEK_OF_YEAR时遇到问题。

 by passing date '31-Dec-2014': calendar1.get(Calendar.WEEK_OF_YEAR) - return 1 by passing date '31-Dec-2015' calendar1.get(Calendar.WEEK_OF_YEAR) - return 53 by passing date '31-Dec-2016' calendar1.get(Calendar.WEEK_OF_YEAR) - return 52 by passing date '31-Dec-2017' calendar1.get(Calendar.WEEK_OF_YEAR) - return 52 by passing date '31-Dec-2018' calendar1.get(Calendar.WEEK_OF_YEAR) - return 1 

每次它返回不同的值。 你能帮我解决这个问题吗?

代码如下。

  Calendar calendar1 = Calendar.getInstance(); calendar1.setTime('31-Dec-2012'); calendar1.set(Calendar.HOUR_OF_DAY, 0); calendar1.setFirstDayOfWeek(Calendar.MONDAY); 

WEEK_OF_YEAR定义依赖于Locale,您可以在此javadoc中看到:

为WEEK_OF_YEAR字段计算的值范围为1到53.日历年的第一周是从getFirstDayOfWeek()开始的最早的七天时段,该时间段至少包含该年的getMinimalDaysInFirstWeek()天。 因此,它取决于getMinimalDaysInFirstWeek(),getFirstDayOfWeek()和1月1日的星期几的值。一年的第1周和第二年的第1周之间的周(不包括)从2到52顺序编号或53(Julian-Gregorian过渡期间的年份除外)。

也看看这个问题或在Wiki – ISO时钟看到周差异。

这是重复的问题,但长话短说

 Calendar c = Calendar.getInstance(); c.setMinimalDaysInFirstWeek(7);//anything more than 1 will work in this year DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); c.setTime( sdf.parse("31/12/2010")); System.out.println( c.get( Calendar.WEEK_OF_YEAR ) ); 

2012年12月31日返回53