2015年11月18日水曜日

【Java】UTC時間の文字列をTimestamp型に変換する方法

こんにちは。エンジニアのKです。

solrのレスポンスに含まれる時間文字列をTimestamp型に変換しようとしたときに、少しはまったので覚書です。
solrに格納される時刻はデフォルトでUTC時間とのことで、ぱっと見、日本時間から9時間前の表記となります。
solrのdate型カラムのレスポンス値は以下のような文字列になっています。

2015-11-18T10:00:00Z

この文字列を以下のようにしてTimestamp型に変換します。

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

(略)

    SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    try {
        Timestamp t = new Timestamp(dateFormatter.parse("2015-11-18T10:00:00Z").getTime());
        System.out.println(t); // 2015-11-18 19:00:00.0
    } catch (ParseException e) {

    }


  1. SimpleDateFormatでフォーマットを指定します。TとZは'(シングルクオート)で囲んでエスケープしないとParseExceptionが投げられてしまいます。
  2. SimpleDateFormat#setTimeZoneでタイムゾーンを設定できます。今回は対象の文字列にあわせてUTCにします。
  3. あとはSimpleDateFormat#parseでDate型オブジェクトに、Date#getTime()でUNIXタイムスタンプ値に、さらにTimestampのコンストラクタに渡すことで、無事Timestamp型に変更することができました。


0 コメント:

コメントを投稿