Java で約 15 年の経験がありますが、日付と時刻の処理のトピックには常につまずきます...
状況は次のとおりですString
。表現として、外部システムからタイムスタンプを取得します。タイムスタンプのセマンティックは、UTC 日付を表すことです。このタイムスタンプは、エンティティに配置してから、PostgreSQL データベースのTIMESTAMP
フィールドに配置する必要があります。さらに、現地時間 (私の場合は CEST) と同じタイムスタンプをエンティティに入れ、次にデータベースのTIMESTAMP WITH TIME ZONE
フィールドに入れる必要があります。
コードを実行するマシンの設定に関係なく、タイムスタンプがエンティティ (他の UTC タイムスタンプでいくつかの検証を行うため) およびデータベース (後でレポートで使用するため) に正しく保存されるようにする正しい方法は何ですか?の上)?
これが私のローカル マシンで問題なく動作するコードです。
SimpleDateFormat sdfUTC = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
sdfUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
Date utcTimestamp = sdfUTC.parse(utcTimestampString);
// getMachinesTimezone is some internal util method giving the TimeZone object of the machines Location
Calendar localTimestamp = new GregorianCalendar(getMachinesTimezone());
localTimestamp.setTimeInMillis(utcTimestamp.getTime());
しかし、サーバー上で同じコードを実行すると、異なる時間が発生したため、正しい処理方法ではないと思います。助言がありますか?
PS: このフォーラムで検索したときに Joda Time について読みましたが、指定されたプロジェクトでは、既存のモジュールを変更しただけなので新しいライブラリを導入できず、標準の JDK1.6 を使用する必要があります。