/** * Measure time elapsed. * @author Xuan Ngo * */ import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class Chronometer { private Calendar m_oStart = null; private Calendar m_oEnd = null; public Chronometer(){} public void start() { this.m_oStart = Calendar.getInstance(); } public void stop() { this.m_oEnd = Calendar.getInstance(); } /** * @return Return the elapsed time measured in milliseconds. */ public final long getDiffInMillis() { return this.m_oEnd.getTimeInMillis() - this.m_oStart.getTimeInMillis(); } /** * @return Return the elapsed time measured as HH:MM:SS.mmmm. */ public final String getDiffInString() { /*********************** * Calculate statistics. ***********************/ long lTotalRuntime = this.getDiffInMillis(); long lRuntime = lTotalRuntime; long lRuntimeHrs = lRuntime/(1000*3600); lRuntime = lRuntime - (lRuntimeHrs*1000*3600);// Runtime remaining. long lRuntimeMin = (lRuntime)/(1000*60); lRuntime = lRuntime - (lRuntimeMin*1000*60); // Runtime remaining. long lRuntimeSec = lRuntime/(1000); lRuntime = lRuntime - (lRuntimeSec*1000); // Runtime remaining. return String.format("%02d", lRuntimeHrs)+":"+String.format("%02d", lRuntimeMin)+":"+String.format("%02d", lRuntimeSec)+"."+lRuntime; } public void report() { // Start at YYYY-MM-DD HH:MM:SS.mmm System.out.println("\nStart at "+this.getDateTimeFormatted(this.m_oStart)); // Ran for HH:MM:SS.mmm (milliseconds) System.out.println("Ran for "+this.getDiffInString()); // End at YYYY-MM-DD HH:MM:SS.mmm System.out.println("End at "+this.getDateTimeFormatted(this.m_oEnd)); } private final String getDateTimeFormatted(Calendar oCalendar) { final String sDateFormat = "yyyy-MM-dd_HH:mm:ss.SSSS"; Date oCurrentDate = oCalendar.getTime(); SimpleDateFormat oSimpleDateFormat = new SimpleDateFormat(sDateFormat); return oSimpleDateFormat.format(oCurrentDate); } }