UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Java】オフセット付きの日時

Postgresqlに日時のデータを保存する場合、全ての時間帯付きの日付と時刻は UTC で内部的に保存される

そこで、データベースとアプリケーション間の日時の整合性を保つために、Javaアプリで扱う日時も UTC で固定したい

Javaでオフセット(時差)付きの日時を扱いたい場合はOffsetDateTimeを使うのが良い

docs.oracle.com

OffsetDateTimeの概要は以下

使い方は以下

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Example {
    public static void main(String[] args) {
        // APIから取得した日時文字列(例:2024-01-06T15:00:00+02:00)
        String dateTimeFromApi = "2024-01-06T15:00:00+02:00";

        // 文字列をOffsetDateTimeに変換
        OffsetDateTime odt = OffsetDateTime.parse(dateTimeFromApi, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

        // 処理(例:UTCに変換)
        OffsetDateTime utcTime = odt.withOffsetSameInstant(OffsetDateTime.now().getOffset());
        
        System.out.println("UTC Time: " + utcTime);
    }
}