Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Duplicate
-
2.2, 2.3
-
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
- duplicates
-
LANG-346 Dates.round() behaves incorrectly for minutes and seconds
- Closed