package com.tddinaction.time.abstraction; import java.util.Calendar; import java.util.Date; /** * Abstraction for system time. * * @author Lasse Koskela */ public class SystemTime { private static TimeSource defaultSource = new TimeSource() { public long millis() { return System.currentTimeMillis(); } }; private static TimeSource source = defaultSource; public static long asMillis() { return getTimeSource().millis(); } public static Calendar asCalendar() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(getTimeSource().millis()); return cal; } public static Date asDate() { return new Date(getTimeSource().millis()); } public static void reset() { setTimeSource(null); } public static void setTimeSource(TimeSource source) { SystemTime.source = source; } private static TimeSource getTimeSource() { return (source != null ? source : defaultSource); } }