Java Calendar,以不同的方式运行OSX Windows

Ros*_*lle 6 java windows macos jsp jdk1.6

基本上我已经使用java servlets构建了一个约会调度程序webapp.它在很大程度上依赖于javas Calendar.整个事情是在我的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());
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

然而在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
Run Code Online (Sandbox Code Playgroud)

正如我们在这里看到的,如果我构建一个表格来表示这些值的每周计划,那么mac将在本周所包含的星期日早上6点开始.但是电脑将在下周的星期日早上6点开始.

这意味着我创建的任何约会在PC上是不同步的(不同的日期到期望)注意:pc已经用jdk1.6和jdk1.7进行了测试

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

谢谢

Udo*_*ski 4

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

Calendar.getInstance(Locale.US);
Run Code Online (Sandbox Code Playgroud)

否则 getInstance() 将使用系统的默认区域设置。