Author: djones Date: Fri Mar 14 13:23:25 2014 New Revision: 1577519 URL: http://svn.apache.org/r1577519 Log: Make use of existing TimeUnit class to manage time units.
Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java?rev=1577519&r1=1577518&r2=1577519&view=diff ============================================================================== --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java Fri Mar 14 13:23:25 2014 @@ -24,6 +24,7 @@ import java.util.Date; import java.util.Iterator; import java.util.Locale; import java.util.NoSuchElementException; +import java.util.concurrent.TimeUnit; /** * <p>A suite of utilities surrounding the use of the @@ -1288,7 +1289,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInMilliseconds(final Date date, final int fragment) { - return getFragment(date, fragment, Calendar.MILLISECOND); + return getFragment(date, fragment, TimeUnit.MILLISECONDS); } /** @@ -1328,7 +1329,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInSeconds(final Date date, final int fragment) { - return getFragment(date, fragment, Calendar.SECOND); + return getFragment(date, fragment, TimeUnit.SECONDS); } /** @@ -1368,7 +1369,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInMinutes(final Date date, final int fragment) { - return getFragment(date, fragment, Calendar.MINUTE); + return getFragment(date, fragment, TimeUnit.MINUTES); } /** @@ -1408,7 +1409,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInHours(final Date date, final int fragment) { - return getFragment(date, fragment, Calendar.HOUR_OF_DAY); + return getFragment(date, fragment, TimeUnit.HOURS); } /** @@ -1448,7 +1449,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInDays(final Date date, final int fragment) { - return getFragment(date, fragment, Calendar.DAY_OF_YEAR); + return getFragment(date, fragment, TimeUnit.DAYS); } /** @@ -1488,7 +1489,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInMilliseconds(final Calendar calendar, final int fragment) { - return getFragment(calendar, fragment, Calendar.MILLISECOND); + return getFragment(calendar, fragment, TimeUnit.MILLISECONDS); } /** * <p>Returns the number of seconds within the @@ -1527,7 +1528,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInSeconds(final Calendar calendar, final int fragment) { - return getFragment(calendar, fragment, Calendar.SECOND); + return getFragment(calendar, fragment, TimeUnit.SECONDS); } /** @@ -1567,7 +1568,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInMinutes(final Calendar calendar, final int fragment) { - return getFragment(calendar, fragment, Calendar.MINUTE); + return getFragment(calendar, fragment, TimeUnit.MINUTES); } /** @@ -1607,7 +1608,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInHours(final Calendar calendar, final int fragment) { - return getFragment(calendar, fragment, Calendar.HOUR_OF_DAY); + return getFragment(calendar, fragment, TimeUnit.HOURS); } /** @@ -1649,7 +1650,7 @@ public class DateUtils { * @since 2.4 */ public static long getFragmentInDays(final Calendar calendar, final int fragment) { - return getFragment(calendar, fragment, Calendar.DAY_OF_YEAR); + return getFragment(calendar, fragment, TimeUnit.DAYS); } /** @@ -1657,13 +1658,13 @@ public class DateUtils { * * @param date the date to work with, not null * @param fragment the Calendar field part of date to calculate - * @param unit the {@code Calendar} field defining the unit + * @param unit the time unit * @return number of units within the fragment of the date * @throws IllegalArgumentException if the date is <code>null</code> or * fragment is not supported * @since 2.4 */ - private static long getFragment(final Date date, final int fragment, final int unit) { + private static long getFragment(final Date date, final int fragment, final TimeUnit unit) { if(date == null) { throw new IllegalArgumentException("The date must not be null"); } @@ -1677,28 +1678,28 @@ public class DateUtils { * * @param calendar the calendar to work with, not null * @param fragment the Calendar field part of calendar to calculate - * @param unit the {@code Calendar} field defining the unit + * @param unit the time unit * @return number of units within the fragment of the calendar * @throws IllegalArgumentException if the date is <code>null</code> or * fragment is not supported * @since 2.4 */ - private static long getFragment(final Calendar calendar, final int fragment, final int unit) { + private static long getFragment(final Calendar calendar, final int fragment, final TimeUnit unit) { if(calendar == null) { throw new IllegalArgumentException("The date must not be null"); } - final long millisPerUnit = getMillisPerUnit(unit); + long result = 0; - int offset = (unit == Calendar.DAY_OF_YEAR) ? 0 : 1; + int offset = (unit == TimeUnit.DAYS) ? 0 : 1; // Fragments bigger than a day require a breakdown to days switch (fragment) { case Calendar.YEAR: - result += ((calendar.get(Calendar.DAY_OF_YEAR) - offset) * MILLIS_PER_DAY) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.DAY_OF_YEAR) - offset, TimeUnit.DAYS); break; case Calendar.MONTH: - result += ((calendar.get(Calendar.DAY_OF_MONTH) - offset) * MILLIS_PER_DAY) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.DAY_OF_MONTH) - offset, TimeUnit.DAYS); break; default: break; @@ -1712,16 +1713,16 @@ public class DateUtils { // The rest of the valid cases case Calendar.DAY_OF_YEAR: case Calendar.DATE: - result += (calendar.get(Calendar.HOUR_OF_DAY) * MILLIS_PER_HOUR) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.HOUR_OF_DAY), TimeUnit.HOURS); //$FALL-THROUGH$ case Calendar.HOUR_OF_DAY: - result += (calendar.get(Calendar.MINUTE) * MILLIS_PER_MINUTE) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.MINUTE), TimeUnit.MINUTES); //$FALL-THROUGH$ case Calendar.MINUTE: - result += (calendar.get(Calendar.SECOND) * MILLIS_PER_SECOND) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.SECOND), TimeUnit.SECONDS); //$FALL-THROUGH$ case Calendar.SECOND: - result += (calendar.get(Calendar.MILLISECOND) * 1) / millisPerUnit; + result += unit.convert(calendar.get(Calendar.MILLISECOND), TimeUnit.MILLISECONDS); break; case Calendar.MILLISECOND: break;//never useful default: throw new IllegalArgumentException("The fragment " + fragment + " is not supported"); @@ -1803,38 +1804,6 @@ public class DateUtils { return truncatedDate1.compareTo(truncatedDate2); } - /** - * Returns the number of milliseconds of a {@code Calendar} field, if this is a constant value. - * This handles millisecond, second, minute, hour and day (even though days can very in length). - * - * @param unit a {@code Calendar} field constant which is a valid unit for a fragment - * @return the number of milliseconds in the field - * @throws IllegalArgumentException if date can't be represented in milliseconds - * @since 2.4 - */ - private static long getMillisPerUnit(final int unit) { - long result = Long.MAX_VALUE; - switch (unit) { - case Calendar.DAY_OF_YEAR: - case Calendar.DATE: - result = MILLIS_PER_DAY; - break; - case Calendar.HOUR_OF_DAY: - result = MILLIS_PER_HOUR; - break; - case Calendar.MINUTE: - result = MILLIS_PER_MINUTE; - break; - case Calendar.SECOND: - result = MILLIS_PER_SECOND; - break; - case Calendar.MILLISECOND: - result = 1; - break; - default: throw new IllegalArgumentException("The unit " + unit + " cannot be represented is milleseconds"); - } - return result; - } //----------------------------------------------------------------------- /**