相同的区域设置在不同的计算机上为同一日期提供不同的周数

时间:2016-08-24 11:49:31

标签: java

对于Java应用程序,周数对最终用户很重要。但是由于某些原因,对于相同的日期和区域设置,我的机器和最终用户的周数不同。

我们都运行Windows 10 64bit和jre1.8.0_101

我创建了一个小程序来说明问题,它在两台机器之间产生不同的结果。

Calendar calUs = Calendar.getInstance(Locale.US);
String usToday = "this week US: \t\t\t" + calUs.get(Calendar.WEEK_OF_YEAR) + " (should be 35 on 24-8-2016)";

Calendar calDe = Calendar.getInstance(Locale.GERMAN);
String deToday = "this week DE: \t\t\t" + calDe.get(Calendar.WEEK_OF_YEAR) + " (should be 34 on 24-8-2016)";

Calendar calDef = Calendar.getInstance();
String defToday = "this week default default: \t" + calDef.get(Calendar.WEEK_OF_YEAR)
        + " (should be 34 on 24-8-2016)";

System.out.println("Default locale: " + Locale.getDefault() + "\t(should be nl_NL)");
System.out.println(usToday);
System.out.println(deToday);
System.out.println(defToday);

在我的机器上产生:

  

默认语言环境:nl_NL(应为nl_NL)

     

本周美国:35(2016年8月24日应为35)

     

本周DE:34(2016年8月24日应为34)

     

本周默认默认值:34(2016年8月24日应为34)

但是对于最终用户,我们看到了错误的结果:

  

默认语言环境:nl_NL(应为nl_NL)

     

本周美国:35(2016年8月24日应为35)

     

本周DE:35(2016年8月24日应为34)

     

本周默认默认值:35(2016年8月24日应为34)

我已经尝试更改Windows注册表中的第一天和第一周的设置,以尝试重现问题,但没有成功。在MS Outlook中,我们在两台计算机上获得正确的周数。这让我相信这个问题仅限于java。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我刚刚在同事的机器上查看了我的Joda时间测试程序,该程序可以正常工作。所以看起来我们将努力改变主程序以使用该库(并且一旦我们到达Java 8就可能切换到Time)

我建议在处理Java中的周数时,不要花太多时间让Calendar类合作。