Java Timestampから文字列(String)に変換、StringからTimestampへ変換する方法
Java Timestampから文字列(String)に変換、StringからTimestampへ変換する方法です。
java.sql.Timestampとは、SQLのTIMESTAMP型に対応したクラスで、日時データの操作をおこなう場合に利用します。Java.util.Dateクラスのサブクラスに位置しています。
ここでは TimestampをStringに変換する方法と、その逆のStringからTimestampへ変換する方法 を紹介します。
Timestampを理解する
まずはTimestampを理解しましょう。既に知識としてある方は読み飛ばしても問題ありません。
最初に現在日時を取得することにしましょう。
Timestampのコンストラクタには、ミリ秒の時間値を指定します。SystemクラスのcurrentTimeMillisメソッドを使えば、ミリ秒で表現される現在時間を返してくれるので、これを使います。
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
System.out.println(currentTimestamp);
結果はこう表示されます。
2018-08-09 14:40:12.021
ふむふむ、簡単ですね^^
TimestampをStringに変換する
TimestampをStringに変換するには、日付や時間の書式設定でおなじみのSimpleDateFormatクラスを使います。
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
System.out.println(currentTimestamp);
String currentTimestampToString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(currentTimestamp);
System.out.println(currentTimestampToString);
結果はこう表示されます。
2018/08/09 14:40:12
おおおー、TimestampからStringに変換された―^^
これならシステムの画面や帳票への出力にも使えますね。
StringをTimestampに変換する
こんどは逆にStringからTimestampへ変換します。まずは文字列から日付に戻すところからですね。
こんなメソッドを用意しましょう。
public static Date toDate(String value, String format) {
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateFormat.setLenient(false);// 日付や時刻を厳密にチェックする
try {
return dateFormat.parse(value);
} catch ( ParseException e ) {
return null;
} finally {
dateFormat = null;
}
}
はい、これはStringからjava.util.Dateへ変換するメソッドです。このメソッドの戻り値であるDateクラスにはgetTimeメソッドがあり、ミリ秒を返してくれます。それをTimestampのコンストラクタに渡してあげれば変換できます。
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
System.out.println(currentTimestamp);
String currentTimestampToString = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(currentTimestamp);
System.out.println(currentTimestampToString);
Timestamp timestamp = new Timestamp(toDate(currentTimestampToString,"yyyy/MM/dd HH:mm:ss").getTime());
System.out.println(timestamp);
結果はこう表示されます。
2018-08-09 14:40:12.0
おおおおおー、StringからTimestampに変換された―^^
これならデータベースへの保存に使えますね。
サンプルソース
紹介した方法を清書するとこんな感じになります。
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimestampConverter {
private static String FORMAT_DATE_TIME = "yyyy/MM/dd HH:mm:ss";
public static void main(String[] args) {
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
System.out.println(currentTimestamp);
String currentTimestampToString = new SimpleDateFormat(FORMAT_DATE_TIME).format(currentTimestamp);
System.out.println(currentTimestampToString);
Timestamp timestamp = new Timestamp(toDate(currentTimestampToString, FORMAT_DATE_TIME).getTime());
System.out.println(timestamp);
}
public static Date toDate(String value, String format) {
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
dateFormat.setLenient(false);// 日付や時刻を厳密にチェックする
try {
return dateFormat.parse(value);
} catch ( ParseException e ) {
return null;
} finally {
dateFormat = null;
}
}
}
参考にしてみてください。
まとめ
Java8ではDate,Calendarクラスの代替として、“Instant”、”LocalDateTime”、”ZonedDateTime”が導入されましたね。中でもデータベースとの連携でよく使う”LocalDateTime”は「タイムゾーンなしの日時」で、不変の日付/時間オブジェクトとなっています。
まぁ、Javaでの日付・時刻操作のメンドくささ相変わらずなわけだけど、もう少しなんとかならないものかといつも思うわけです。慣れるしかないんでしょうけどね、ええ、ええ、はい。
とりあえずこの情報が誰かの役に立てばうれしいです。
おつかれさまでした。