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