public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
Instant instant = Instant.from(zdt);
Timestamp timestamp = Timestamp.from(instant);
System.out.println(ldt + "\n");
System.out.println(zdt + "\n");
System.out.println(instant + "\n");
System.out.println(timestamp + "\n");
}
そして、それは印刷します。UTC時刻をjava.sql.Timestampにするにはどうすればよいですか?
2017-05-07T18:13:26.969
2017-05-07T18:13:26.969-04:00[America/New_York]
2017-05-07T22:13:26.969Z
2017-05-07 18:13:26.969
にはどうすればInstant
と同じ時間で保存SQL Timestamp
を作ることができますか?私はTimestamp
をどこからでも得ることができる必要があり、それは世界のその部分で起こっている何時でもそれを変換する必要があります。問題は、システムクロックが設定された時刻と同じ時刻に保存し続けることです。
これは助けになりました。 'インスタント'は現在のUTC時刻を表示するので全然欺かれていましたが、 'タイムスタンプ 'に変換されたときに私の現地時間が表示されました。だから、リモートDBに保存すると、それは私がどこにいるかはいつでも変わりません。 'Timestamp'にはタイムゾーンがなく、' Instant'はエポックからのオフセットですが、 'Timestamp'が現在のUTC時刻ではなくローカル時刻として現在時刻を記録するのは全く無意味です。私はそれがタイムゾーンを表示するはずだと思っていたと自動的にみなしたので、ポーズするのは難しい質問でした。 – DayTripperID
これはタイムスタンプのローカルタイム変換の問題を解決するのに役立ちました。私はこれが変換を誇張しているのかどうかは分かりませんが、次のチェーンは、UTCにあった格納されたlongを変換し、インスタントからではなくLDTを使用してTimestampに変換します: 'Timestamp.valueOf( \t \t LocalDateTime。 ofEpochSecond(longEpochVal、0、ZoneOffset.UTC)) ' –