我正在尝试为我们的财务部门生成一些代码,它们需要一个字段,该字段将为他们提供一年中的当前一周,但以星期日为一周的第一天。因此,例如01-25-16(MM-dd-yyyy)将是第4周。但是,当我尝试使用java.util.Calendar
和calendar.setFirstDayOfWeek
到周日时,它告诉我这是第5周,因为它似乎是从12月底开始算到1月3日作为第1周。
这是我到目前为止编写的代码:
private static int getWeekOfYearBySunday(DateTime dt){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(dt.getMillis());
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
即使返回星期日的星期几,也应该返回4,这将返回星期数5。
您必须进行更改minimalDaysInFirstWeek
,请参阅Calendar#setMinimalDaysInFirstWeek(int):
设置一年中第一周所需的最少天数;例如,如果第一周定义为包含一年中第一个月第一天的一周,则使用值1调用此方法。如果必须整周,则使用值7。
另请参阅GregorianCalendar
:
例如,1998年1月1日是星期四。如果
getFirstDayOfWeek()
isMONDAY
和getMinimalDaysInFirstWeek()
is 4(ISO 8601标准兼容设置),则1998年的第1周开始于1997年12月29日,并于1998年1月4日结束。周年是1998年,是日历年度的最后三天。但是,getFirstDayOfWeek()
则SUNDAY
1998年的第1周从1998年1月4日开始,到1998年1月10日结束;1998年的前三天是1997年第53周的一部分,而一周是1997年。
但是,如果您为自己的财务部门编写代码,则宁愿使用权限Locale
来创建日历,而不是更改某些属性,请参阅Calendar#getInstance(Locale):
使用默认时区和指定的语言环境获取日历。在
Calendar
基于与给定的语言环境的默认时区当前时间返回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句