こんにちは。エンジニアのKです。
solrのレスポンスに含まれる時間文字列をTimestamp型に変換しようとしたときに、少しはまったので覚書です。
solrに格納される時刻はデフォルトでUTC時間とのことで、ぱっと見、日本時間から9時間前の表記となります。
solrのdate型カラムのレスポンス値は以下のような文字列になっています。
2015-11-18T10:00:00Z
この文字列を以下のようにしてTimestamp型に変換します。
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) { }
- SimpleDateFormatでフォーマットを指定します。TとZは'(シングルクオート)で囲んでエスケープしないとParseExceptionが投げられてしまいます。
- SimpleDateFormat#setTimeZoneでタイムゾーンを設定できます。今回は対象の文字列にあわせてUTCにします。
- あとはSimpleDateFormat#parseでDate型オブジェクトに、Date#getTime()でUNIXタイムスタンプ値に、さらにTimestampのコンストラクタに渡すことで、無事Timestamp型に変更することができました。