我得到的问题,同时从日历对象获取WEEK_OF_YEAR(I am getting issue wh

2019-09-21 09:16发布

我得到的问题,同时获取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);

Answer 1:

WEEK_OF_YEAR定义依赖于语言环境,你可以在看这个的Javadoc :

从1至53日历年的第一周的WEEK_OF_YEAR领域范围计算值是最早的七天内开始对getFirstDayOfWeek(),它包含从当年至少getMinimalDaysInFirstWeek()天。 因而它取决于getMinimalDaysInFirstWeek(),getFirstDayOfWeek()的值,和一月的一周中的一年1周和下一年的1周(不包括)之间1.周一天按顺序编号从2到52或53(除参与朱利安·格里过渡年(S))。

也看看这个问题,或者在维基- ISO时钟看周差异。



Answer 2:

这是dupped问题,但长话短说

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

返回53 31日 - 12月2012



文章来源: I am getting issue while fetching WEEK_OF_YEAR from calendar object
标签: java calendar