トップJava > 日付時刻に関する処理

日付時刻に関する処理

UNIXタイムスタンプを取得する

UNIXタイムスタンプとは協定世界時 (UTC) における1970年1月1日午前0時0分0秒からの経過秒数であるが、 Java では System.currentTimeMills() により、ミリ秒単位の値が得られる。

 long time = System.currentTimeMills();

日頃、プログラムの実行時間計測に System.currentTimeMills() を使っているが、現在時刻を得るには 次のようにする。

 Instant instant = Instant.ofEpochSecond(System.currentTimeMills()/1000);
 ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
 System.out.println(zonedDateTime);

このときの出力は次のようになる。

 2023-01-23T12:34:56+09:00[Asia/Tokyo]

文字列形式には YYYY-MM-DDTHH:mm:ssZ 形式も使われる。Zは UTC を意味する。

精度の高い経過時間を取得する

プログラムの実行時間の計測では、ミリ秒では精度が足りないケースがある。 このとき System.nanoTime() を使う[2]。 System.currentTimeMillis() とは異なり、現在時刻は求められない。

自分の場合、一回の計測ではなく、繰り返し実行する処理の一部の実行時間を累積して計測するのに 使っている。

参考文献

[1] [Java]Unixタイムスタンプと日時の変換 (ZonedDateTime, LocalDateTime)
[2] 【Java入門】処理時間をナノ秒・マイクロ秒で計測する方法
[3] Date Time String Format