torutkのブログ

ソフトウェア・エンジニアのブログ

日付時刻の文字列化

今までは、日時を文字列化したいときには、java.text.SimpleDateFormatterを使っていました。しかし、Stringクラスのformatメソッドに日時を文字列化する変換が揃っているので、後者を使う方がコードは簡単になります。

Date today = new Date();
// 2008/03/08 のような文字列を生成
String text = String.format("%tY/%<tm/%<td", today);

Date型でなく、long型(System.currentTimeMillis()が返却する通算ミリ秒)を同じ書式で引数に指定できます。

パフォーマンスは?

気になるパフォーマンスですが、Logging APIの独自Formatterで使用している日時文字列生成箇所にString.formatとSimpleDateFormatと2パターンを用意し、その処理時間をSystem.nanoTime()を使って計ってみました。

  1. String.formatの場合、1回目の呼び出しに60ms弱、2回目以降は300us前後
  2. SimpleDateFormatの場合、1回目の呼び出しに800us、2回目以降は50us前後

計測に使ったPCは、Windows Vista(64bit)/JDK 1.6.0_10-beta-b13(64bit)でCPUはAthlon 64x2 4200+(2.1GHz)です。

ログで秒間1000回出すとしたら、1.は300ms、2.は50msをログ出力(の一部分の処理)に費やされることになるので、性能が必要な処理では1.は向かないようです。