Nice one!
2014-03-14 14:23 GMT+01:00 <djo...@apache.org>: > 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; > - } > > > //----------------------------------------------------------------------- > /** > > > -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter