Java日付 - java.sql.Timestampクラス

JavaのTimestampの説明、TimestampからStringへの変換、StringからTimestampへの変換

Timestampクラス

java.sql.Timestampは、SQLのTIMESTAMP型に対応するために作られました。Timestampクラスで日付や時刻に関連するデータを操作する場合に使用します。
Timestampjava.util.Dateクラスを継承したサブクラスです。

Timestampの理解

Timestampのコンストラクタには、ミリ秒の時間値を指定します。

SystemクラスのcurrentTimeMillis()メソッドを使用すると、ミリ秒で表される現在時刻が返されるため、これを使ってみましょう。

Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
System.out.println(currentTimestamp);

実行結果:

2022-12-12 08:03:15.759

Timestamp <-> String変換

TimestampをStringに変換

TimestampStringに変換するには、日付と時刻の形式でよく使われるSimpleDateFormatクラスを使用します。

Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());

// Timestamp to String
String currentTimestampToString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(currentTimestamp);
System.out.println(currentTimestampToString);

実行結果:

2022/12/12 08:03:15

Timestampが2022/12/12 08:03:15のようなStringに変換されました。

StringをTimestampに変換

今度は逆に、StringからTimestampへ変換してみます。

まず、Stringからjava.util.Dateクラスに変換する必要があります。変換されたDateクラスからgetTime()でミリ秒を取得し、その値をTimestampコンストラクタに渡すと変換できます。

String currentTimestampToString = "2022/12/12 08:03:15";

//  String to Timestamp
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
dateFormat.setLenient(false);// 日付と時刻を厳密に確認
try {
    Date stringToDate = dateFormat.parse(currentTimestampToString);
    Timestamp stringToTimestamp = new Timestamp(stringToDate.getTime());
    System.out.println(stringToTimestamp);
} catch (ParseException e) {
    e.printStackTrace();
}

実行結果:

2022-12-12 08:03:15.0

このように生成したTimestampは、データベースに保存するときに使用できます。

変換の全体コード

上で作成したコードの全体は次のとおりです。

package com.devkuma.basic.datetime;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimestampConverter {
    public static void main(String[] args) {
        Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
        System.out.println(currentTimestamp);

        // Timestamp to String
        String currentTimestampToString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(currentTimestamp);
        System.out.println(currentTimestampToString);

        //  String to Timestamp
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        dateFormat.setLenient(false);// 日付と時刻を厳密に確認
        try {
            Date stringToDate = dateFormat.parse(currentTimestampToString);
            Timestamp stringToTimestamp = new Timestamp(stringToDate.getTime());
            System.out.println(stringToTimestamp);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Timestampの代わりにLocalDateTime

Java 8では、DateCalendarクラスの代替として、InstantLocalDateTimeZonedDateTimeが導入されました。

その中でもLocalDateTimeは、「タイムゾーンのない日時」を表す不変の日付/時刻オブジェクトで、データベースと関連して使用できます。