Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Java日历问题,JDK1.6.0.22_Windows_Calendar_Java - Fatal编程技术网

Windows Java日历问题,JDK1.6.0.22

Windows 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");

我拿不定一年中的哪一周。在我的机器上安装了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");
         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。