2

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);
4

2 回答 2

2

WEEK_OF_YEAR如您在此 javadoc 中所见,定义取决于区域设置:

为 WEEK_OF_YEAR 字段计算的值范围为 1 到 53。日历年的第一周是从 getFirstDayOfWeek() 开始的最早的 7 天时间段,其中至少包含该年的 getMinimalDaysInFirstWeek() 天数。因此,它取决于 getMinimalDaysInFirstWeek()、getFirstDayOfWeek() 和 1 月 1 日的星期几的值。一年的第 1 周和下一年的第 1 周(不包括在内)之间的周数从 2 到 52 或53 年(儒略-格里高利过渡所涉及的年份除外)。

还可以查看这个问题Wiki - ISO 时钟以查看周差。

于 2012-08-20T12:43:42.780 回答
1

这是一个愚蠢的问题,但长话短说

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

于 2012-08-20T13:53:07.697 回答