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

DateUtils.round() often fails

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Duplicate
    • 2.2, 2.3
    • 2.4
    • None
    • None

    Description

      The example below shows the failure of DateUtils.round(Date,int). With version 2.1 round() works fine.

              Now                                 DateUtils                        calculated directly     
      2008-02-22T11:09:06,680 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:07,000    ERROR
      2008-02-22T11:09:06,680 Truncated: 2008-02-22T11:09:06,000         2008-02-22T11:09:06,000    ok
      2008-02-22T11:09:07,040 Rounded:   2008-02-22T11:09:07,000         2008-02-22T11:09:07,000    ok
      2008-02-22T11:09:07,040 Truncated: 2008-02-22T11:09:07,000         2008-02-22T11:09:07,000    ok
      2008-02-22T11:09:07,399 Rounded:   2008-02-22T11:09:07,000         2008-02-22T11:09:07,000    ok
      2008-02-22T11:09:07,399 Truncated: 2008-02-22T11:09:07,000         2008-02-22T11:09:07,000    ok
      2008-02-22T11:09:07,743 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:08,000    ERROR
      2008-02-22T11:09:07,743 Truncated: 2008-02-22T11:09:07,000         2008-02-22T11:09:07,000    ok
      2008-02-22T11:09:08,102 Rounded:   2008-02-22T11:09:08,000         2008-02-22T11:09:08,000    ok
      2008-02-22T11:09:08,102 Truncated: 2008-02-22T11:09:08,000         2008-02-22T11:09:08,000    ok
      2008-02-22T11:09:08,446 Rounded:   2008-02-22T11:09:08,000         2008-02-22T11:09:08,000    ok
      2008-02-22T11:09:08,446 Truncated: 2008-02-22T11:09:08,000         2008-02-22T11:09:08,000    ok
      2008-02-22T11:09:08,805 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:09,000    ERROR
      2008-02-22T11:09:08,805 Truncated: 2008-02-22T11:09:08,000         2008-02-22T11:09:08,000    ok
      2008-02-22T11:09:09,149 Rounded:   2008-02-22T11:09:09,000         2008-02-22T11:09:09,000    ok
      2008-02-22T11:09:09,149 Truncated: 2008-02-22T11:09:09,000         2008-02-22T11:09:09,000    ok
      2008-02-22T11:09:09,508 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:10,000    ERROR
      2008-02-22T11:09:09,508 Truncated: 2008-02-22T11:09:09,000         2008-02-22T11:09:09,000    ok
      2008-02-22T11:09:09,852 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:10,000    ERROR
      2008-02-22T11:09:09,852 Truncated: 2008-02-22T11:09:09,000         2008-02-22T11:09:09,000    ok
      2008-02-22T11:09:10,211 Rounded:   2008-02-22T11:09:10,000         2008-02-22T11:09:10,000    ok
      2008-02-22T11:09:10,211 Truncated: 2008-02-22T11:09:10,000         2008-02-22T11:09:10,000    ok
      2008-02-22T11:09:10,555 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:11,000    ERROR
      2008-02-22T11:09:10,555 Truncated: 2008-02-22T11:09:10,000         2008-02-22T11:09:10,000    ok
      2008-02-22T11:09:10,915 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:11,000    ERROR
      2008-02-22T11:09:10,915 Truncated: 2008-02-22T11:09:10,000         2008-02-22T11:09:10,000    ok
      2008-02-22T11:09:11,258 Rounded:   2008-02-22T11:09:11,000         2008-02-22T11:09:11,000    ok
      2008-02-22T11:09:11,258 Truncated: 2008-02-22T11:09:11,000         2008-02-22T11:09:11,000    ok
      2008-02-22T11:09:11,618 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:12,000    ERROR
      2008-02-22T11:09:11,618 Truncated: 2008-02-22T11:09:11,000         2008-02-22T11:09:11,000    ok
      2008-02-22T11:09:11,961 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:12,000    ERROR
      2008-02-22T11:09:11,961 Truncated: 2008-02-22T11:09:11,000         2008-02-22T11:09:11,000    ok
      2008-02-22T11:09:12,321 Rounded:   2008-02-22T11:09:12,000         2008-02-22T11:09:12,000    ok
      2008-02-22T11:09:12,321 Truncated: 2008-02-22T11:09:12,000         2008-02-22T11:09:12,000    ok
      2008-02-22T11:09:12,665 Rounded:   2008-02-22T11:00:01,000         2008-02-22T11:09:13,000    ERROR
      2008-02-22T11:09:12,665 Truncated: 2008-02-22T11:09:12,000         2008-02-22T11:09:12,000    ok
      
      Example Code
      java.text.SimpleDateFormat dtFormat = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss,SSS");
      
      System.out.println(
          "        Now            "
          + "            "
          + "   DateUtils  "
          + "         "
          + "       calculated directly "
          + "    ");
      int errorCnt = 0;
      while(errorCnt < 10)
      {
        java.util.Date now = new java.util.Date();
        
        java.util.Date roundedByUtils = org.apache.commons.lang.time.DateUtils.round(now, java.util.Calendar.SECOND);
        java.util.Date truncatedByUtils = org.apache.commons.lang.time.DateUtils.truncate(now, java.util.Calendar.SECOND);
        
        long rest = now.getTime() % 1000;
        java.util.Date rounded;
        java.util.Date truncated = new java.util.Date(now.getTime() - rest);
        if (rest < 500)
          rounded = truncated;
        else
          rounded = new java.util.Date(now.getTime() + (1000 - rest));
        boolean roundError = !roundedByUtils.equals(rounded);
        boolean truncateError = !truncatedByUtils.equals(truncated);
        if (roundError || truncateError)
          errorCnt++;
      
        System.out.println(
            dtFormat.format(now)
            + " Rounded:   "
            + dtFormat.format(roundedByUtils)
            + "         "
            + dtFormat.format(rounded)
            + "    "
            + (roundError ? "ERROR" : "ok"));
        System.out.println(
            dtFormat.format(now)
            + " Truncated: "
            + dtFormat.format(truncatedByUtils)
            + "         "
            + dtFormat.format(truncated)
            + "    "
            + (truncateError ? "ERROR" : "ok"));
        Thread.sleep(351);
      }
      

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              plink Peter Schreuer
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: