こんにちは。エンジニアの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型に変更することができました。