package org.ei.drishti.common.util; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.joda.time.LocalTime; import org.joda.time.Period; import static org.motechproject.util.DateUtil.inRange; public class DateUtil { private static DateUtility dateUtility = new RealDate(); public static void fakeIt(LocalDate fakeDayAsToday) { dateUtility = new MockDate(fakeDayAsToday); } public static LocalDate today() { return dateUtility.today(); } public static long millis() { return dateUtility.millis(); } public static boolean isDateWithinGivenPeriodBeforeToday(LocalDate referenceDateForSchedule, Period period) { return inRange(toTime(referenceDateForSchedule), toTime(today().minus(period)), toTime(today())); } private static DateTime toTime(LocalDate referenceDateForSchedule) { return referenceDateForSchedule.toDateTime(new LocalTime(0, 0)); } public static LocalDate tryParse(String value, LocalDate defaultValue) { try { return LocalDate.parse(value); } catch (Exception e) { return defaultValue; } } } interface DateUtility { LocalDate today(); long millis(); } class RealDate implements DateUtility { @Override public LocalDate today() { return LocalDate.now(); } @Override public long millis() { return DateTime.now().getMillis(); } } class MockDate implements DateUtility { private DateTime fakeDay; MockDate(LocalDate fakeDay) { this.fakeDay = fakeDay.toDateTimeAtStartOfDay(); } @Override public LocalDate today() { return fakeDay.toLocalDate(); } @Override public long millis() { return fakeDay.getMillis(); } }