0

Java時間で何が起こっているのか、そしてこれに関連する何千もの投稿があるのか​​ について完全に混乱しているので、jodaTimeを使用してUTCで時間を保存することができました:

Calendar cal = new GregorianCalendar();

cal.setTimeInMillis(DateTimeZone.getDefault().convertLocalToUTC(
                            cal.getTimeInMillis(), false));

私は hibernate を使用しているため (バージョン 4 で正しく動作するように JodaTime 用のアダプターを使用したくないため)、この jodaTime メソッドのみを使用して jdk 時間を utc に変換します。これは期待される結果を生成するようであり、現地時間 (現在のロンドン GMT+1) は、この現地時間から 1 を引くことによって UTC に変換されます。

ここまでは順調ですね。次に、特定のタイムゾーンの時間を取得するたびに、DST を含めて -3 であるべきところに -2 という間違ったオフセットを取得します。

カレンダー cal = new GregorianCalendar();

          System.out.println("Local London Hours: "+cal.get(Calendar.HOUR_OF_DAY));
          System.out.println("Local London Milliseconds: "+cal.getTimeInMillis());

          cal.setTimeInMillis(DateTimeZone.getDefault().convertLocalToUTC(
                  cal.getTimeInMillis(), false));

          System.out.println("UTC Hours: "+cal.get(Calendar.HOUR_OF_DAY));
          System.out.println("UTC Milliseconds: "+cal.getTimeInMillis());

          // Time for specific time zone
          cal.setTimeZone(TimeZone.getTimeZone("Europe/Vilnius"));


          System.out.println("Vilnius Hours: "+cal.get(Calendar.HOUR_OF_DAY));
          System.out.println("Vilnius Milliseconds: "+cal.getTimeInMillis());

          // is this time in DST? - Yes
          System.out.println("Vilnius time is in DST: "+TimeZone.getTimeZone("Europe/Vilnius").inDaylightTime(cal.getTime()));

http://www.timeanddate.com/worldclock/city.html?n=660 特定のタイムゾーンのタイムゾーンの詳細

出力:

ロンドン現地時間: 21

ローカル ロンドン ミリ秒: 1381869901339

UTC 時間: 20

UTC ミリ秒: 1381866301339

ビリニュス 営業時間: 22 //これは 23 のはずです (リンクによると)

ビリニュス ミリ秒: 1381866301339

ビリニュスの時間は DST です: true //いいえ、時間の値が 23 ではないため、そうではありません

4

1 に答える 1