Issue Details (XML | Word | Printable)

Key: LANG-414
Type: Bug Bug
Status: Closed Closed
Resolution: Duplicate
Priority: Critical Critical
Assignee: Unassigned
Reporter: Peter Schreuer
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Commons Lang

DateUtils.round() often fails

Created: 22/Feb/08 10:17 AM   Updated: 24/Feb/08 04:24 AM
Return to search
Component/s: None
Affects Version/s: 2.2, 2.3
Fix Version/s: 2.4

Time Tracking:
Not Specified

Issue Links:
Duplicate
 

Resolution Date: 24/Feb/08 04:24 AM


 Description  « Hide
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);
}


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Henri Yandell made changes - 23/Feb/08 11:25 PM
Field Original Value New Value
Fix Version/s 2.4 [ 12312481 ]
Henri Yandell made changes - 24/Feb/08 04:24 AM
Link This issue duplicates LANG-346 [ LANG-346 ]
Henri Yandell made changes - 24/Feb/08 04:24 AM
Resolution Duplicate [ 3 ]
Status Open [ 1 ] Closed [ 6 ]