ZonedDateTime
をどのようにしてSQL Timestamp
に変換し、タイムゾーン情報を保持しますか? 私は、UTCゾーニング時間がかかるTimestamp
に変換した後、戻ってそれを変換しようとしていますが、私はTimestamp
に変換するとき、それはタイムゾーン情報を失い、Timestamp
は私のローカルタイムゾーンを使用して作成されます。UTCタイムスタンプを保存するにはどうすればよいですか?
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a");
ZonedDateTime zdtUTC = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime zdtNY = zdtUTC.withZoneSameInstant(ZoneId.of("America/New_York"));
ZonedDateTime zdtAZ = zdtUTC.withZoneSameInstant(ZoneId.of("America/Phoenix"));
ZonedDateTime zdtUK = zdtUTC.withZoneSameInstant(ZoneId.of("Europe/London"));
System.out.println(formatter.format(zdtUTC) + " in UTC zone");
System.out.println(formatter.format(zdtNY) + " in New York, NY");
System.out.println(formatter.format(zdtAZ) + " in Phoenix, AZ");
System.out.println(formatter.format(zdtUK) + " in London, UK");
Timestamp timestamp = Timestamp.from(zdtUTC.toInstant());
LocalDateTime converted = timestamp.toLocalDateTime();
ZonedDateTime convertedZdt = ZonedDateTime.of(converted, ZoneId.of("UTC"));
System.out.println(timestamp);
System.out.println(formatter.format(convertedZdt) + " in UTC zone");
}
06:33 PM in UTC zone
02:33 PM in New York, NY
11:33 AM in Phoenix, AZ
07:33 PM in London, UK
2017-05-07 14:33:06.745
02:33 PM in UTC zone
正確なタイムゾーン情報を使用してTimestamp
レコードが確実に記録されるようにするには、何が必要ですか?
あなたは '&server Timezone = UTCを使用することができます。成功とのLegacy Date time Code = false' –
SQLタイムスタンプはタイムゾーンを持っていません - ちょうど瞬間です。別にタイムゾーンが必要な場合は、タイムゾーンIDを別の列に保存することをおすすめします。その時点でオフセットだけを気にしているなら、それを保存することができますが、タイムゾーンを保存するのと同じではないことに注意する必要があります。 –
タイムゾーンを保存するのと同じではないことは分かっていますが、UTCゾーンでその瞬間に何時に絶対時間を保存できるようにする必要があります。データベーステーブルを変更することはできません。だから私がニューヨークにいて、ニューヨークの午後3時であれば、それは11 AMとして保管する必要があります。同様に、私がロンドンにいて、午後4時であれば、3PMとして保管する必要があります。それ以外の場合は、データベースから 'Timestamp'を取得する際に参照ポイントがありません。 – DayTripperID