in util/src/main/java/com/epam/deltix/util/time/IntervalCalculator.java [117:219]
public static long getNormalizedTime (
TimeUnit unit,
int year,
int month,
int day,
int hour,
int minute,
int second,
int millisecond
)
{
/*
* Assert argument ranges
*/
switch (unit) {
case MILLISECOND:
assert millisecond >= 0 && millisecond <= 999 :
"Illegal millisecond: " + millisecond;
case SECOND:
assert second >= 0 && second <= 59 :
"Illegal second: " + second;
case MINUTE:
assert minute >= 0 && minute <= 59 :
"Illegal minute: " + minute;
case HOUR:
assert hour >= 0 && hour <= 23 :
"Illegal hour: " + hour;
case DAY:
case WEEK:
assert day >= 1 && day <= 31 :
"Illegal day: " + day;
case MONTH:
assert month >= 1 && month <= 12 :
"Illegal month: " + month;
}
// Set ignored values
switch (unit) {
case YEAR:
month = 11; // 0-based December!!!
day = 31;
hour = 23;
minute = second = 59;
millisecond = 999;
break;
case QUARTER: // Set to beginning of next quarter, correction required
month--; // Translate to 0-based for java.util.Calendar
month = month - month % 3 + 3;
day = 1;
hour = minute = second = millisecond = 0;
break;
case MONTH: // Set to beginning of next month, correction required
// month = month - 1 + 1 :)
day = 1;
hour = minute = second = millisecond = 0;
break;
default:
month--; // Translate to 0-based for java.util.Calendar
break;
}
switch (unit) {
case WEEK: // Leave day alone, post-processing required!
case DAY:
hour = 23;
case HOUR:
minute = 59;
case MINUTE:
second = 59;
case SECOND:
millisecond = 999;
case MILLISECOND:
break;
}
mCalendar.set (year, month, day, hour, minute, second);
mCalendar.set (Calendar.MILLISECOND, millisecond);
switch (unit) {
case QUARTER:
case MONTH:
return (mCalendar.getTimeInMillis () - 1);
case WEEK: // Normalize to end of Sunday
long time = mCalendar.getTimeInMillis ();
return (time - (time + 259200000L) % 604800000L + 604799999L);
default:
return (mCalendar.getTimeInMillis ());
}
}