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();
}
}