Java Timestampから文字列(String)に変換、StringからTimestampへ変換する方法

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での日付・時刻操作のメンドくささ相変わらずなわけだけど、もう少しなんとかならないものかといつも思うわけです。慣れるしかないんでしょうけどね、ええ、ええ、はい。

とりあえずこの情報が誰かの役に立てばうれしいです。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。