今までは、日時を文字列化したいときには、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()を使って計ってみました。
- String.formatの場合、1回目の呼び出しに60ms弱、2回目以降は300us前後
- 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.は向かないようです。