| Code with Finding: |
class DateUtils {
/**
* <p>Round this date, leaving the field specified as the most
* significant field.</p>
*
* <p>For example, if you had the datetime of 28 Mar 2002
* 13:45:01.231, if this was passed with HOUR, it would return
* 28 Mar 2002 14:00:00.000. If this was passed with MONTH, it
* would return 1 April 2002 0:00:00.000.</p>
*
* <p>For a date in a timezone that handles the change to daylight
* saving time, rounding to Calendar.HOUR_OF_DAY will behave as follows.
* Suppose daylight saving time begins at 02:00 on March 30. Rounding a
* date that crosses this time would produce the following values:
* <ul>
* <li>March 30, 2003 01:10 rounds to March 30, 2003 01:00</li>
* <li>March 30, 2003 01:40 rounds to March 30, 2003 03:00</li>
* <li>March 30, 2003 02:10 rounds to March 30, 2003 03:00</li>
* <li>March 30, 2003 02:40 rounds to March 30, 2003 04:00</li>
* </ul>
* </p>
*
* @param date the date to work with, either Date or Calendar
* @param field the field from <code>Calendar</code>
* or <code>SEMI_MONTH</code>
* @return the rounded date
* @throws IllegalArgumentException if the date is <code>null</code>
* @throws ClassCastException if the object type is not a <code>Date</code>
* or <code>Calendar</code>
* @throws ArithmeticException if the year is over 280 million
*/
public static Date round(Object date, int field) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
}
if (date instanceof Date) {
return round((Date) date, field);
} else if (date instanceof Calendar) {
return round((Calendar) date, field).getTime();
} else {
throw new ClassCastException("Could not round " + date);
}
}
}
|