android java,日期的周数不正确

时间:2016-01-12 10:35:05

标签: java android date

在我的Android应用中,我正在努力获取提供日期的周数。但它并没有给我正确的周数我用下面的代码来得到周数。

String format = "dd-MM-yyyy";
SimpleDateFormat df = new SimpleDateFormat(format);
Date date = df.parse(date);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);

但这并没有给我我所期待的。例如,让我们采取2016年1月。 enter image description here

从上面的日历中可以看出 2016年1月,天数属于周数 1 第1,第2和第三次。对于周数 2 ,相关日期第4,第5,第6,第7,第8,第9和第10 。然后对于周数 3 ,相关日期 11,12,13,14,15,16和17 ,依此类推。但是对于 12/01/2016 上面的代码,我给出了周数 2 而不是周数 3 。我做错了什么,或者这是函数正常工作的方式。如上所述,我怎样才能达到获得周数的目标。

2 个答案:

答案 0 :(得分:5)

1月1日,2日和3日实际上是2015年的第53周。代码工作正常,您对周编号的假设是错误的。 GregorianCalendar的默认行为与Wikipedia中第一周的ISO定义相同:

  

第01周的ISO 8601定义是年份的第一周   星期四在它。以下定义基于此属性   周是相互等效的,因为ISO周从星期一开始:

     
      
  • 这是第一周,1月份的成员占多数(4个或更多)。
  •   
  • 第一天是最接近1月1日的星期一。
  •   
  • 它有1月4日。因此,最早可能的日期是12月29日至1月4日,即1月4日至10日。
  •   
  • 如果星期六,星期日和1月1日不是工作日,它有一年的第一个工作日。
  •   
     

如果1月1日是星期一,星期二,星期三或星期四,那么它就在   第01周。如果1月1日是星期五,则是第53周的一部分   去年;如果在星期六,这是第52周的一部分(或如果是星期五53   前一年是闰年);如果在星期天,这是第52周的一部分   去年。

答案 1 :(得分:3)

找到https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html

为WEEK_OF_YEAR字段计算的值范围为1到53. 日历年的第一周是从getFirstDayOfWeek()开始的最早的七天时段,其中至少包含getMinimalDaysInFirstWeek()天数年。因此,它取决于getMinimalDaysInFirstWeek(),getFirstDayOfWeek()和1月1日星期几的值。

因此,您的第一周将是第0周,因为它从您第一个完整的7天周开始计算。您可以通过将getMinimalDaysInFirstWeek()设置为较低的值

来更改此设置