Uploaded image for project: 'Commons Lang'
  1. Commons Lang
  2. LANG-379

Calculating A date fragment in any time-unit

    Details

    • Type: New Feature
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.3
    • Fix Version/s: 2.4
    • Component/s: lang.time.*
    • Labels:
      None

      Description

      These DateUtils-features can make it possible to calculate a date-part in any time-unit. For example: the number of minutes of this year, the number of seconds of today, etc.

      I've started with some coding, and if there's enough interest we can make it more solid.

      public static long getFragmentInSeconds(Date date, int fragment)

      { return getFragment(date, fragment, Calendar.SECOND); }

      public static long getFragmentInMinutes(Date date, int fragment)

      { return getFragment(date, fragment, Calendar.MINUTE); }

      public static long getFragmentInHours(Date date, int fragment)

      { return getFragment(date, fragment, Calendar.HOUR_OF_DAY); }

      public static long getFragmentInDays(Date date, int fragment)

      { return getFragment(date, fragment, Calendar.DAY_OF_YEAR); }

      public static long getFragmentInSeconds(Calendar calendar, int fragment)

      { return getFragment(calendar, fragment, Calendar.SECOND); }

      public static long getFragmentInMinutes(Calendar calendar, int fragment)

      { return getFragment(calendar, fragment, Calendar.MINUTE); }

      public static long getFragmentInHours(Calendar calendar, int fragment)

      { return getFragment(calendar, fragment, Calendar.HOUR_OF_DAY); }

      public static long getFragmentInDays(Calendar calendar, int fragment)

      { return getFragment(calendar, fragment, Calendar.DAY_OF_YEAR); }

      private static long getFragment(Date date, int fragment, int unit)

      { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return getFragment(calendar, fragment, unit); }

      private static long getFragment(Calendar calendar, int fragment, int unit) {
      long millisPerUnit = getMillisPerFragment(unit);
      long result = 0;
      switch (fragment)

      { case Calendar.YEAR: result += (calendar.get(Calendar.DAY_OF_YEAR) * MILLIS_PER_DAY) / millisPerUnit; case Calendar.MONTH: result += (calendar.get(Calendar.DAY_OF_MONTH) * MILLIS_PER_DAY) / millisPerUnit; case Calendar.DAY_OF_YEAR: case Calendar.DATE: result += (calendar.get(Calendar.HOUR_OF_DAY) * MILLIS_PER_HOUR) / millisPerUnit; case Calendar.HOUR_OF_DAY: result += (calendar.get(Calendar.MINUTE) * MILLIS_PER_MINUTE) / millisPerUnit; case Calendar.MINUTE: result += (calendar.get(Calendar.SECOND) * MILLIS_PER_SECOND) / millisPerUnit; case Calendar.SECOND: result += (calendar.get(Calendar.MILLISECOND) * 1) / millisPerUnit; }

      return result;
      }

      private static long getMillisPerFragment(int fragment) {
      long result = Long.MAX_VALUE;
      switch (fragment)

      { 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; }

      return result;
      }

        Attachments

        1. DateUtilsFragmentTest.java
          19 kB
          Robert Scholte
        2. DateUtils.patch
          18 kB
          Robert Scholte
        3. DateUtils_2.patch
          24 kB
          Robert Scholte
        4. LANG-379.patch
          45 kB
          Henri Yandell

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              rfscholte-getthere Robert Scholte
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: