6

基本的に、Javaサーブレットを使用して予定スケジューラWebアプリケーションを構築しました。これは、javasカレンダーに大きく依存しています。すべては、jdk1.6を使用してマウンテンライオンを実行している私のmacbookで開発されました。

今私のPCでそれをテストするとき、私はいくつかの奇妙な結果を持っています。

ランニング:

   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時に開始されます。ただし、PCは翌週の日曜日の午前6時に開始されます。

これは、私が作成した予定がPC上で同期していないことを意味します(予想とは異なる日)注:PCはjdk1.6とjdk1.7の両方でテストされています

誰かがこれの背後にある解決策や理由を知っていますか?

ありがとう

4

1 に答える 1

4

おそらく、これはロケール/タイムゾーンの問題であり、両方のマシンで異なる可能性があります。
両方のインスタンスが同じロケールを使用していることを確認するには、次のようにハードコーディングします。

Calendar.getInstance(Locale.US);

それ以外の場合、 getInstance() はシステムのデフォルト ロケールを使用します。

于 2012-12-19T09:05:00.227 に答える