// JRE 1.6.0_07
// java.lang.System
// currentTimeMillis, nanoTime
// System.out.printlnやSystem.err.println
// tag ミリ秒 マイクロ秒 ナノ秒
// ミリ秒を取る(お馴染みの子)
// 1970/01/01 00:00:00からの経過時間を取る
long l = System.currentTimeMillis();
System.out.println( l );
// => 1246970969468
// currentTimeMillisの注意点
// 取れる時間の精度はOSに依存します
// http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/System.html#currentTimeMillis%28%29
// ナノ秒を取る(1.5から導入)
// currentTimeMillisのような基準時間はないので、これを見て今何時とかは判定できません
// 実行前と実行後で差を取って実行時間を計測したい時とか、
// 後はjava.util.Randomのデフォルト引数はナノ秒をシードに使っていますが、
// そんな感じの、より確実に一意性を出そうとか、そんな感じの使い方が想定されます
long s = System.nanoTime();
for( int i = 0; i < 10000; i++);
System.out.println( System.nanoTime() - s );
// => 123909ナノ秒 (約124マイクロ秒 = 約0.12ミリ秒。正確に計算しろとか言わないで、ぶたないで)
// http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/System.html#nanoTime%28%29
// 上記のドキュメントにある通り、nanoTime()は割と危うい子ですが、
// ミリ秒では判断しづらい実行時間を計測したい時にはとても便利です
// マイクロ秒が欲しい時は、1000掛けてください
// TimeUnitで変換しても良いかも
// TimeUnitの詳しい説明は後日として、今回はマイクロ秒への変換だけ
long microSec = TimeUnit.MICROSECONDS.convert( System.nanoTime() - s, TimeUnit.NANOSECONDS );
System.out.println( microSec + "microsec passed" );
// => 995マイクロ秒経過