タイムスタンプから文字列へ、文字列からタイムスタンプへ 2014/02/10
2014/03/26

追記 2014/03/27 下の記事もあわせて参照のこと
プログラマメモ2: java.sql.TimestampからgetTimeすると、もとの精度にはもどせないことに注意せよ。

javaです。

java.sql.Timestampを文字列表現にします。それから文字列をTimestampに復元します。
元のTimestampと比較して等値かどうか調べるような場合を想定しています。

簡単に2種類ほど方法はあるかと思います。

ひとつはSimpleDateFormatを使うやり方。
もうひつとは、long値をとりだしてそれを文字列として扱うやり方です。

SimpleDateFormatを使う場合はのフォーマットは

yyyy-MM-dd HH:mm:ss.SSS
になります。
ただ僕的には、ちょっと違和感があります。

これよりlong値にして引き回した方がいいかなーと思います。
ただし、SimpleDateFormatのほうが、人が理解しやすい、ヒューマンリーダブルな感じです。

試したコードは以下


import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TestTimestamp { public static void main(String[] args) throws ParseException { a(); } static void a() throws ParseException { // タイムスタンプを生成 final Timestamp timestamp = new Timestamp(new Date().getTime()); System.out.println(timestamp); final String stt = timestamp.toString(); {// がんばって文字列からTimestampを作り直す SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS"); Date date = simpleDateFormat.parse(stt); Timestamp timestamp2 = new Timestamp(date.getTime()); if (timestamp.equals(timestamp2)) { System.out.println("*** BINGO!"); } else { System.out.println("*** ouch"); } } {// longから文字列にしてそれをもとにもどしてからTimestamp作って比較 String slong = timestamp.getTime() + ""; long l = Long.parseLong(slong); Timestamp timestamp2 = new Timestamp(l); if (timestamp.equals(timestamp2)) { System.out.println("*** BINGO!"); } else { System.out.println("*** ouch"); } } } }


結果はこんな感じ
2014-02-11 00:11:49.034
*** BINGO!
*** BINGO!

: