私は本当に日付について非常に混乱しています。Java日付の混乱
私はJava上でバックエンドを持つWebアプリケーションを持っています。私は時間情報がない日付フィールドを持っています。私は冬眠を使ってこの情報をDBに書きます。定義は
@Column
@Temporal(TemporalType.DATE)
private Date startDate;
実際にはこれらは基本的な情報です。ここに私の問題があります。
UTC(GMT+0)
タイムゾーンでJavaを実行しますが、クライアントのタイムゾーンはGMT+3
です。
ユーザが1日を選択します(としましょう、10.12.2016 (dd.MM.yyyy)
)。今日のクライアント側では10.12.2016 00:00 GMT+3
と表されます。このユーザーがこの日付を保存した後。
この日付は私のバックエンドに09.12.2016 21:00 GMT+0
となります。私はtimeinfoなしでこの日付を保存したい。 javaコードはデータを09.12.2016
として保存します。
今、ユーザーは自分が保存したものをS /見たい(その09.12.2016 00:00 GMT+0
に対応)。 Javaは日付を09.12.2016 00:00 GMT+0
とし、クライアントはこの日付を09.12.2016 03:00 GMT+3
とします。最後に、ユーザーは09.12.2016
と表示されますが、この日付は10.12.2016
と保存されています。
したがって、ユーザーは実際に保存する日の前日を確認します。
データをTemporalType.DATE
として保存し、正しい日付を表示したいと考えています。
どうすればこの問題を解決できますか? Googleで2日間掘り起こしていますが、合理的な説明が見つかりませんでした。
注::**私のユーザーは、GMT+3
だけでなく、異なるタイムゾーンでもかまいません。このような状況を考えてください。
タイムスタンプを使用し、実際のデータベースにUTC時刻を格納する必要があります。これは、日の境界線を正しく取得する唯一の方法です。実際、多くのデータベースはタイムゾーン情報を格納していません。 –
これは論理的だと思われますが、GMT + 2のユーザーを考えてみましょう。このユーザーは09.10.2016と日付を表示します(日付は09.10.2016 23:00となるため)。これは通常のケースですか、いくつかの取り決めをする必要がありますか:/ – xxlali
時間帯なしでタイムゾーンが適切ですか?日付は何を表していますか?あなたのユーザは、日付を入力し、時間を切り捨てることで効果的に別の時間に変更します。 1つのタイムゾーンで日付を入力した後、別のタイムゾーンに移動する場合は、少なくともクライアントは現在のタイムゾーンを送信する必要があります。その後、GMTのタイムゾーンを、要求に応じてクライアントのタイムゾーンに変換します。 – ProgrammersBlock