6

基本上我已经使用 java servlet 构建了一个约会调度程序 webapp。它严重依赖于 javas 日历。整个事情是在我的macbook上用jdk 1.6运行山狮开发的。

现在在我的电脑上测试它时,我得到了一些奇怪的结果。

跑步:

   System.out.println("selected = "+selected);
   Calendar now  = Calendar.getInstance();
        System.out.println("a "+now.getTime());
    now.setTimeInMillis(selected);
        System.out.println("b "+now.getTime());

    now.set(Calendar.MILLISECOND,0);
    now.set(Calendar.SECOND,0);
    now.set(Calendar.MINUTE,0);
    now.set(Calendar.HOUR_OF_DAY,6);//start from 6am
        System.out.println("d "+now.getTime());

    now.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("e "+now.getTime());

在 PC 上将输出:

    selected = 1355835600000
    a Wed Dec 19 19:35:36 EST 2012
    b Wed Dec 19 00:00:00 EST 2012
    d Wed Dec 19 06:00:00 EST 2012
    e Sun Dec 23 06:00:00 EST 2012

然而在mac上它会输出:

    selected = 1355835600000
    a Wed Dec 19 19:33:57 EST 2012
    b Wed Dec 19 00:00:00 EST 2012
    d Wed Dec 19 06:00:00 EST 2012
    e Sun Dec 16 06:00:00 EST 2012

正如我们在这里看到的,如果我根据这些值构建一个代表每周计划的表,则 mac 将在本周包含的星期日早上 6 点开始。但是电脑将在下周包含的星期日早上 6 点开始。

这意味着我创建的任何约会在电脑上都不同步(与预期不同的日子)注意:电脑已经过 jdk1.6 和 jdk1.7 测试

有谁知道这背后的任何解决方案或原因?

谢谢

4

1 回答 1

4

可能这是一个区域设置/时区问题,可能在两台机器上有所不同。
通过硬编码确保两个实例使用相同的语言环境,例如:

Calendar.getInstance(Locale.US);

否则 getInstance() 将使用您系统的默认语言环境。

于 2012-12-19T09:05:00.227 回答