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

时间:2012-08-20 12:39:25

标签: java calendar

从日历对象中获取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);

2 个答案:

答案 0 :(得分:2)

WEEK_OF_YEAR定义依赖于语言环境,您可以在this javadoc中看到:

  

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

还可以查看this questionWiki - ISO clock查看周差异。

答案 1 :(得分:0)

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

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