Windows Java日历问题,JDK1.6.0.22
我拿不定一年中的哪一周。在我的机器上安装了JDK 1.6.0.22版本,在另一台机器上安装了JDK 1.6.0.21版本。两台机器返回不同的结果: (1.6.0.22)周为:1Windows Java日历问题,JDK1.6.0.22,windows,calendar,java,Windows,Calendar,Java,我拿不定一年中的哪一周。在我的机器上安装了JDK 1.6.0.22版本,在另一台机器上安装了JDK 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");
(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();
}
为什么JDK 1.6.0.22给出了错误的结果?此摘录解释了为什么会出现这种差异:
为年中的周计算的值
字段范围从1到53第1周,适用于
一年是最早的七天
从getFirstDayOfWeek()开始
至少包含
getMinimalDaysInFirstWeek()天,从
那一年。因此,这取决于
getMinimalDaysInFirstWeek()的值,
getFirstDayOfWeek()和
一月一日的一周
从日历的源代码中
:
firstDayOfWeek和minimalDaysInFirstWeek都依赖于区域设置
所以决定这一点的是地区,而不是时区显然,在某些地区,一年中的第一周被认为是在前一年开始的。尝试运行以下命令:
Calendar cal = new GregorianCalendar();
System.out.println(Locale.getDefault());
System.out.println(cal.getMinimalDaysInFirstWeek());
System.out.println(cal.getFirstDayOfWeek());
我敢打赌,要么您在不同的语言环境中运行不同的版本,要么这些版本之间的语言环境数据发生了变化。结果“1”甚至可能是更正确的结果,这是由于区域设置数据中的错误修复。不要使用JDK日期/时间类,而是使用。例如:locale.US:week 1,locale.GERMANY:week 52。德国的一周从周一开始,美国的一周从周日开始。但是你会如何解释这个例子呢<代码>Locale.setDefault(Locale.US);Calendar Calendar=Calendar.getInstance(TimeZone.getTimeZone(“GMT”));calendar.setTime(新的SimpleDataFormat(“yyyyMMdd”).parse(“20101226”);System.out.println(calendar.get(calendar.WEEK OF theu YEAR));//1 calendar.setTimeZone(TimeZone.getTimeZone(“AST”));System.out.println(calendar.get(calendar.WEEK OF theu YEAR));//52我不相信这符合is)8601标准,该标准规定“一年中的第01周根据定义是指今年的第一周有周四,这相当于包含1月4日的一周。换句话说,新年的第一周是指新年中大部分日子的一周”@巴卢斯克:嗯,真奇怪。我得到52个打印两次,运行该代码的Java1.6.0_21和1.6.0_22?嗯,这很奇怪(不管怎么说,整个
日历的事情都很奇怪)。我很好奇别人看到了什么。我正在Win7 64位上运行1.6.0_22-b04。