import java.time.*; import java.time.temporal.*; import java.util.*; import java.util.concurrent.TimeUnit; import java.nio.file.attribute.FileTime; public class TestFileTimeBM { public static void main(String[] args) throws Throwable { testSecs(10000); long t = 0; for (int i = 0; i < 10; i++) { t += testSecs(10000); } System.out.println("Seconds:" + (t / 10)); testMillis(10000); t = 0; for (int i = 0; i < 10; i++) { t += testMillis(10000); } System.out.println(" Millis:" + (t / 10)); testNanos(10000); t = 0; for (int i = 0; i < 10; i++) { t += testNanos(10000); } System.out.println(" Nanos:" + (t / 10)); } private static final int NANOS_PER_SECOND = 1000_000_000; private static long testNanos(int N) { Random r = new Random(); long t0 = System.currentTimeMillis(); for (int i = 0; i < N; i++) { long years = r.nextInt(200); long days = (years * 365L + r.nextInt(365)) * (r.nextBoolean()? 1 : -1); long secs = days * 86400L + r.nextInt(86400); long nanos = secs * NANOS_PER_SECOND + r.nextInt(NANOS_PER_SECOND); FileTime.from(nanos, TimeUnit.NANOSECONDS).toString(); } return System.currentTimeMillis() - t0; } private static long testMillis(int N) { Random r = new Random(); long t0 = System.currentTimeMillis(); for (int i = 0; i < N; i++) { long years = r.nextInt(200); long days = (years * 365L + r.nextInt(365)) * (r.nextBoolean()? 1 : -1); long secs = days * 86400L + r.nextInt(86400); long millis = secs * 1000 + r.nextInt(1000); FileTime.from(millis, TimeUnit.MILLISECONDS).toString(); } return System.currentTimeMillis() - t0; } private static long testSecs(int N) { Random r = new Random(); long t0 = System.currentTimeMillis(); for (int i = 0; i < N; i++) { long years = r.nextInt(200); long days = (years * 365L + r.nextInt(365)) * (r.nextBoolean()? 1 : -1); long secs = days * 86400L + r.nextInt(86400); FileTime.from(secs, TimeUnit.SECONDS).toString(); } return System.currentTimeMillis() - t0; } }