You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Benedikt Ritter <br...@apache.org> on 2014/03/15 11:30:01 UTC
Re: svn commit: r1577519 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/DateUtils.java
Nice one!
2014-03-14 14:23 GMT+01:00 <dj...@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