問題

Javaでは、Calendar.getInstance();を使用すると、現在のTimezoneのCalendarオブジェクトが取得されます。しかし、java.sql.Timestampは通常、ローカル時間ではなくUTC時間で格納されます。では、カレンダーインスタンスからUTC時間を取得するにはどうすればよいですか?

     DateFormat df = DateFormat.getTimeInstance();
    Calendar cal = Calendar.getInstance();
    Timestamp time = new Timestamp(cal.getTimeInMillis());

    // Prints local time
    System.out.println(df.format(new Date(time.getTime())));

    // Printe local time, but I want UTT Time
    System.out.println("timestamp: " + time);
 

  ベストアンサー

Calendar.getTime()を呼び出すと、関連するタイムゾーンを持たない値が返されます。または、カレンダーが表す瞬間にUTCであると考えることができます。したがって、カレンダーのタイムゾーンで(たとえば)9amの場合、午後5時UTCになる可能性があります。

java.util.Date(そして、Timestamp)は、toString()(暗黙的にも明示的にも)を呼び出すときにシステムのデフォルトのタイムゾーンでフォーマットされますが、タイムゾーンがオブジェクト自体のデータの一部であると考えるようにしないでください。

あなたが達成しようとしていることを正確に明確にする必要があります。そして、おそらく Joda Time がbuilt-inライブラリよりも明確にコードで表現できることがわかります。

  同じタグがついた質問を見る

javalocalizationcalendartimezonetimestamp