フォローアップの質問issue。PostgresのUTCからJavaへのZonedDateTime
使用している日付時刻は、ユーザーがリクエストを送信している場所ではなく、既知のタイムゾーンと一致することがわかっているため、LocalDateTimeを使用してUTCに変換して保持します。その後、予定が取り出されると、保存された時間が(dbに格納された)会議場所のタイムゾーンに変換されます。しかし、私が保存した値は実際に私のローカルタイムゾーンに保存されているように見えます。
私のような休憩コントローラーの日付時刻値を受け取る:
startLocalDateTime: 2016-04-11T10:00
endLocalDateTime: 2016-04-11T10:30
予定が2つのZoneDateTimeのフィールドがあります。
@Column(name = "startDateTime", columnDefinition= "TIMESTAMP WITH TIME ZONE")
private ZonedDateTime startDateTime;
@Column(name = "endDateTime", columnDefinition= "TIMESTAMP WITH TIME ZONE")
private ZonedDateTime endDateTime;
その後、私が私のエンティティにUTCとストアに値を変更Postgresに保存:
appointment.setStartDateTime(startLocalDateTime.atZone(ZoneId.of("UTC")))
appointment.setEndDateTime(endLocalDateTime.atZone(ZoneId.of("UTC")))
と私はそれをPostgresに格納します(columnDefinition= "TIMESTAMP WITH TIME ZONE")
Wh私はpgadminIIIのレコードを見て途中私が参照してください。
startDateTime "2016-04-11 04:00:00-06"
endDateTime "2016-04-11 04:30:00-06"
は、したがって、これらは、(私がこれまでに何も悪いことをやっているなら、私を修正してください)UTC形式で適切に保管されているように見えます。私は、データベースからそれらを取得し、彼らは次のように返されます。これらの値は、JSONとして送り返され
Appointment
startdatetime: 2016-04-11T04:00-06:00[America/Denver]
enddatetime: 2016-04-11T04:30-06:00[America/Denver]
:
{
"appointmentId":50,
"startDateTime":"2016-04-11T04:00",
"endDateTime":"2016-04-11T04:30"
}
だから私は、私は彼ら彼らを取得UTC、として保存していていてもUTCではなくMST(現地時間)のタイムゾーンにあり、実際の時刻に戻すことはできません。
依然として持続性に苦しんでいます。私は自分のエンティティでjava.sql.timestamp、java.sql.Date、java.util.Date、およびjava.time.ZonedDateTimeを使用しようとしました。私のPostgresはまだ "タイムゾーン付きタイムスタンプ"です。しかし、私はSpring-Data-JPAを使用しており、同じタイプのクエリーを行う必要があるためです。 Dateを使用する場合 - sql.Dateまたはutil.Dateですか?
Java Date **は常に** UTC **(常にローカルタイムゾーンが含まれている場合はフォーマットされているため)のため、これらはUTCに格納されます。 –
私は、データベースがUTC形式でそれらを表示する理由を理解していないと思うし、アポイントメントの一部として返されても、時間はUTCですが、ゾーンは "UTC"ではなく "アメリカ/デンバー"であるように見えます。正しい時間を戻すにはどうすればいいですか? – sonoerin
***あなたは***どのように時間を表示していますか? Javaは1970年1月1日午前0時(UTC、別名EPOCH)から、「Date」をミリ秒数で格納するためです。 –