web-dev-qa-db-ja.com

Java.sql.Timestamp UTC時間を作成するにはどうすればよいですか?

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");
}

そしてそれは印刷します:

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

Timestampと同時にSQLInstantを保存するにはどうすればよいですか?どこからでもTimestampを取得し、それを世界のその地域で発生した時間に変換できる必要があります。問題は、システムクロックが設定されている時間と同じ時間に保存され続けることです。

5
CptHowdyRD0

Timestampからではなく、LocalDateTimeからInstantを取得するのが最善です。

最初のステップは、ZonedDateTimeを取得してGMTに変換することです。

ZonedDateTime gmt = zdt.withZoneSameInstant(ZoneId.of("GMT"));

次に、Timestampを介してそれをLocalDateTimeに変換できます。

Timestamp timestamp = Timestamp.valueOf(gmt.toLocalDateTime());
13
Joe C

「TIMESTAMPWITHTIME ZONE」の値を表す場合は、Calendarオブジェクトを受け取る setTimestamp の特定のオーバーロードを使用する必要がある場合があります。

0
David A