
| Key: |
LANG-414
|
| Type: |
Bug
|
| Status: |
Closed
|
| Resolution: |
Duplicate
|
| Priority: |
Critical
|
| Assignee: |
Unassigned
|
| Reporter: |
Peter Schreuer
|
| Votes: |
0
|
| Watchers: |
0
|
|
If you were logged in you would be able to see more operations.
|
|
|
|
Issue Links:
|
Duplicate
|
|
This issue duplicates:
|
|
LANG-346
Dates.round() behaves incorrectly for minutes and seconds
|
|
|
|
|
|
|
|
| Resolution Date: |
24/Feb/08 04:24 AM
|
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
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);
}
|
|
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
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);
}
|
Show » |
made changes - 23/Feb/08 11:25 PM
| Field |
Original Value |
New Value |
|
Fix Version/s
|
|
2.4
[ 12312481
]
|
made changes - 24/Feb/08 04:24 AM
|
Link
|
|
This issue duplicates LANG-346
[ LANG-346
]
|
made changes - 24/Feb/08 04:24 AM
|
Resolution
|
|
Duplicate
[ 3
]
|
|
Status
|
Open
[ 1
]
|
Closed
[ 6
]
|
|