如何确定Java中给定日期的一周中的哪一周;开始日期是1月1日。我看到一些例子,例如使用Calendar.WEEK_OF_YEAR
但是这是由区域设置定义的,导致开始日期不同。
要清楚;一年中的一周,我的意思是:从1月1日开始的一年中的52周中的哪一周。
在Stack上有许多与Calendar.WEEK_OF_YEAR
的语言环境特定行为相关的问题;然而,我没有看到任何一个我需要的答案。
可能出现的问题是,对于Locale.US
,一年中的第一周可能是上一年的最后一周;所以2013年12月31日将显示为2014年第1周。我已经看到Locale.GERMAN
按照我的预期行事,但我不想使用它。
我想避免的典型建议:
Calendar aCalendar = new GregorianCalendar();
aCalendar.get(Calendar.WEEK_OF_YEAR);
答案 0 :(得分:0)
在ISO Week Date的维基百科页面上有一个公式
week(date) = (ordinal(date) - weekday(date) + 10) / 7
使用以下逻辑
方法:使用ISO工作日编号(从星期一的1到7的运行 星期日),从序数日期减去工作日,然后加10。 将结果除以7.忽略余数;商等于 周数。如果这样获得的周数等于0,则意味着 给定日期属于前一个(基于周的)年份。如果一周 获得53个,必须检查日期实际上不是 在第二年的第1周。
答案 1 :(得分:0)
如评论中所述......
Mac用户可以通过选中Preferences > Advanced > Show week numbers
复选框查看日历应用中的周数。
第三方开源日期时间库Joda-Time使用ISO 8601作为其默认值。这包括标准周。
DateTime
对象知道其时区,并知道其标准的一周。
// Better to specify a time zone explicitly than rely on default.
// This list is not quite up-to-date (read page for details): http://joda-time.sourceforge.net/timezones.html
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris");
DateTime dateTime = new DateTime( timeZone );
//DateTime dateTime = new DateTime( 2014, 2, 28, 0, 0, 0 );
DateTime.Property weekProp = dateTime.weekOfWeekyear();
int weekNumber = weekProp.get();
String weekString = weekProp.getAsText();
转储到控制台...
System.out.println( "now: " + dateTime );
System.out.println( "weekProp: " + weekProp );
System.out.println( "weekNumber: " + weekNumber );
System.out.println( "weekString: " + weekString );
跑步时......
now: 2014-01-14T05:57:55.635+01:00
weekProp: Property[weekOfWeekyear]
weekNumber: 3
weekString: 3