2014年9月26日金曜日

[Java] FIXのtimestampの取り扱い

FIXのtimestamp(UTC, String) をLoacalDateTime(JST)に変換したい。いろいろぐぐったが適当なものが見つからず。

FIXのtimestampの例
  SendingTime(UTC) : 52=20140925-18:09:34.422

以下はアイディア
(1) LocalDateTimeに変換し、9時間プラスする。
(2) LocalDateTime(UTC)に変換 ⇒ Instantに変換 ⇒ ZonedDateTIme(JST)に変換 ⇒ LocalDateTime(JST)に変換
(3) もっと良いやり方が。。。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd-HH:mm:ss.SSS");
String sampleTime = "20140925-18:09:34.444";

// UTC
LocalDateTime localDateTimeUtc = LocalDateTime.parse(sampleTime, formatter);

// (1) LocalDateTimeに変換し、9時間プラスする。
LocalDateTime localDateTimeJst = localDateTimeUtc.plusHours(9);

// (2) LocalDateTime(UTC)に変換 ⇒ Instantに変換 ⇒ ZonedDateTIme(JST)に変換 ⇒ LocalDateTime(JST)に変換
Instant instant = localDateTimeUtc.toInstant(ZoneOffset.UTC);
ZonedDateTime zonedDateTimeJst = ZonedDateTime.ofInstant(instant, ZoneId.of("Asia/Tokyo"));
LocalDateTime localDateTimeJst2 = zonedDateTimeJst.toLocalDateTime();

DateTimeAPIで参考になりそうなサイト
・Programming Studio Date and Time API 徹底攻略(5) - Date/Time その2
・JavaのAPI

0 件のコメント:

コメントを投稿