public static long getNormalizedTime()

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