Java で文字列をタイムスタンプに変換する
今回は、Java で文字列をタイムスタンプに変換する 2つの方法を紹介します。タイムスタンプは主にデータベースでイベントの正確な時刻を表現するために使われます。このチュートリアルで使う Timestamp クラスは java.sql.Timestamp パッケージの一部です。
Java で文字列をタイムスタンプに変換するには TimeStamp.valueOf() を使用する
ここでは TimeStamp クラス独自の静的関数 valueOf() を用います。これは文字列を引数に取り、それをタイムスタンプに変換します。ここで注意しなければならないのは、タイムスタンプに変換したい文字列に日付と時刻をどのような形式で記述するかに注意することです。フォーマットは固定されており、yyyy-mm-dd hh:mm:ss という形式に制限されています。
フォーマットを変更して正しい結果を期待することはできませんが、間違ったフォーマットを使用すると IllegalArgumentException が出力されます。下の例では、文字列の日付と時刻として 2020-12-12 01:24:23 を使用していますが、これは正しい書式 yyyy-mm-dd hh:mm:ss に従っています。
これで、valueOf(string) メソッドの唯一の引数として dateTime を渡すことができ、文字列をタイムスタンプに変換します。
import java.sql.Timestamp;
public class StringToTimeStamp {
public static void main(String[] args) {
String dateTime = "2020-12-12 01:24:23";
Timestamp timestamp = Timestamp.valueOf(dateTime);
System.out.println(timestamp);
}
}
出力:
2020-12-12 01:24:23.0
同じ valueOf() メソッドを使って日付と時刻の書式設定の制限を取り除くことができますが、文字列を直接メソッドに渡す代わりに LocalDateTime クラスを使用します。なぜなら、valueOf() は引数に LocalDateTime を受け入れるからです。
次のコードでは、dateTime は日付と時刻を持ち、DateTimeFormatter クラスの ofPatter() メソッドを使ってフォーマットしています。このフォーマッタを使用して LocalDateTime.from() 関数を使用して LocalDateTime オブジェクトをパースして取得します。
LocalDateTime オブジェクトを取得したら、それを Timestamp.valueOf(localDateTime) に渡して文字列をタイムスタンプに変換します。
import java.sql.Timestamp;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class StringToTimeStamp {
public static void main(String[] args) throws ParseException {
String dateTime = "01/10/2020 06:43:21";
DateTimeFormatter formatDateTime = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.from(formatDateTime.parse(dateTime));
Timestamp ts = Timestamp.valueOf(localDateTime);
System.out.println(ts);
}
}
出力:
2020-10-01 06:43:21.0
Java で文字列をタイムスタンプに変換するには Date.getTime() を使用する
文字列をタイムスタンプに変換する 2つ目のメソッドは複数のクラスとメソッドを使用します。LocalDateTime と同様に、文字列の中で日付と時刻のフォーマットを使用することができます。クラス SimpleDateFormate() を使って文字列をフォーマットし、それをパースして Date オブジェクトに変換します。
Date オブジェクトが必要なのは、日付と時刻を long として返す getTime() オブジェクトがあるからです。この long 値を Timestamp のコンストラクタに渡すと、以下のようになります。
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToTimeStamp {
public static void main(String[] args) throws ParseException {
String inDate = "01/10/2020 06:43:21";
DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date date = df.parse(inDate);
long time = date.getTime();
Timestamp ts = new Timestamp(time);
System.out.println(ts);
}
}
出力:
2020-01-10 06:43:21.0
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn