4 // Created by Steven R. Loomis on 11/11/2005.
\r
5 // Copyright 2005-2006 IBM. All rights reserved.
\r
8 package com.ibm.icu.dev.test.util;
\r
11 import com.ibm.icu.text.NumberFormat;
\r
12 import com.ibm.icu.text.RuleBasedNumberFormat;
\r
13 import com.ibm.icu.text.MessageFormat;
\r
17 * Simple stopwatch timer.
\r
18 * Usage: { ElapsedTimer et = new ElapsedTimer();
\r
20 * System.out.println("It took " + et + " to do stuff."); }
\r
22 * Advanced: { ElapsedTimer et = new ElapsedTimer("Thing2's time: {0}"); // messageformat pattern
\r
24 * System.out.println(et.toString()); }
\r
26 * More advanced: NumberFormat and/or MessageFormat can be provided in the constructor
\r
28 public final class ElapsedTimer {
\r
31 * Convenience method to print the elasped time (in milliseconds)
\r
33 public static String elapsedTime(long start, long end) {
\r
34 return diffTime(getFormat(), start, end);
\r
37 public static String elapsedTime(long start) {
\r
38 return diffTime(getFormat(), start, System.currentTimeMillis());
\r
43 private long startTime = System.currentTimeMillis();
\r
44 private NumberFormat myDurationFormat = null;
\r
45 private MessageFormat myMsgFormat = null;
\r
47 public ElapsedTimer() {
\r
50 public ElapsedTimer(MessageFormat aMsgFmt) {
\r
51 myMsgFormat = aMsgFmt;
\r
54 public ElapsedTimer(NumberFormat aNumFmt) {
\r
55 myDurationFormat = aNumFmt;
\r
58 public ElapsedTimer(MessageFormat aMsgFmt, NumberFormat aNumFmt) {
\r
59 myMsgFormat = aMsgFmt;
\r
60 myDurationFormat = aNumFmt;
\r
63 public ElapsedTimer(String pattern) {
\r
64 myMsgFormat = new MessageFormat(pattern);
\r
67 public ElapsedTimer(String pattern, NumberFormat aNumFmt) {
\r
68 myMsgFormat = new MessageFormat(pattern);
\r
69 myDurationFormat = aNumFmt;
\r
73 * @return elapsed time in seconds since object creation
\r
75 public final String toString() {
\r
76 long endTime = System.currentTimeMillis();
\r
77 String duration = diffTime(myDurationFormat, startTime, endTime);
\r
78 if(myMsgFormat == null) {
\r
81 return myMsgFormat.format(new Object[] {duration});
\r
85 private static NumberFormat gFormat = null;
\r
87 private static NumberFormat getFormat() {
\r
88 if(gFormat == null) {
\r
89 gFormat = new RuleBasedNumberFormat(Locale.US,
\r
90 RuleBasedNumberFormat.DURATION);
\r
95 private static String diffTime(NumberFormat fmt, long start, long end) {
\r
100 long age = end - start;
\r
101 double diff = (double)age;
\r
102 diff = diff/(double)1000.0; // millis per second
\r
103 return fmt.format(diff);
\r