Õzb*_*bek 4 java windows calendar
获得一年中的一周我有一个问题.在我的机器上,JDK 1.6.0.22版本安装在另一台机器1.6.0.21上.两台机器都返回不同的结果:
(1.6.0.22)周是:1
(1.6.0.21)周是:52
对于此代码:
try {
Calendar current = new GregorianCalendar();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date d = df.parse("2010-12-28 19:04:38 GMT");
current.setTime(d);
int currentWeek = current.get(Calendar.WEEK_OF_YEAR);
System.out.println("week is: "currentWeek);
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
为什么JDK 1.6.0.22会给出错误的结果?
API文档中的这段摘录解释了为什么会出现这种差异:
为WEEK_OF_YEAR字段计算的值范围为1到53. 一年的第1周是从getFirstDayOfWeek()开始的最早的七天时间段,该时间段至少包含该年的getMinimalDaysInFirstWeek()天.因此,它取决于getMinimalDaysInFirstWeek(),getFirstDayOfWeek()和1月1日星期几的值.
并从源代码Calendar:
firstDayOfWeek和minimalDaysInFirstWeek都依赖于语言环境.
因此,区域设置决定了这一点,而不是时区!显然,在某些地区,一年的第1周被认为是在去年开始的.试试这个:
Calendar cal = new GregorianCalendar();
System.out.println(Locale.getDefault());
System.out.println(cal.getMinimalDaysInFirstWeek());
System.out.println(cal.getFirstDayOfWeek());
Run Code Online (Sandbox Code Playgroud)
我打赌你要么在不同的语言环境中运行不同的版本,要么在这些版本之间更改语言环境数据.结果"1"甚至可能是更正确的结果,并且由于区域设置数据中的错误修复.
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |