package com.github.ruediste1.btrbck.dom;
import org.joda.time.DateTime;
import org.joda.time.Period;
public enum TimeUnit {
SECOND(Period.seconds(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.secondOfMinute().roundFloorCopy();
}
},
MINUTE(Period.minutes(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.minuteOfHour().roundFloorCopy();
}
},
HOUR(Period.hours(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.hourOfDay().roundFloorCopy();
}
},
DAY(Period.days(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.dayOfWeek().roundFloorCopy();
}
},
WEEK(Period.weeks(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.weekOfWeekyear().roundFloorCopy();
}
},
MONTH(Period.months(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.monthOfYear().roundFloorCopy();
}
},
YEAR(Period.years(1)) {
@Override
public DateTime truncate(DateTime time) {
return time.year().roundFloorCopy();
}
},
DECADE(Period.years(10)) {
@Override
public DateTime truncate(DateTime time) {
int year = (int) Math.round(Math.floor(time.year().get() / 10.0)) * 10;
return time.year().roundFloorCopy().withYear(year);
}
};
final private Period period;
private TimeUnit(Period period) {
this.period = period;
}
public Period getPeriod() {
return period;
}
public abstract DateTime truncate(DateTime time);
}