[
https://issues.apache.org/jira/browse/DERBY-4752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12890707#action_12890707
]
Knut Anders Hatlen commented on DERBY-4752:
-------------------------------------------
Examples:
Issue 1:
CheapDateFormatter.formatDate(1325376000000L) returns "2011-13-01 00:00:00.000
GMT", expected: "2012-01-01 00:00:00.000 GMT"
The returned date is wrong and invalid because there is no month 13.
Issue 2:
CheapDateFormatter.formatDate(4114195200000L) returns "2100-05-16 00:00:00.000
GMT", expected: "2100-05-17 00:00:00.000 GMT"
The returned date is one day off.
Issue 3:
CheapDateFormatter.formatDate(4107542400000L) returns "2100-02-29 00:00:00.000
GMT", expected "2100-03-01 00:00:00.000 GMT"
The returned date is invalid because there is no February 29 in the year 2100.
> CheapDateFormatter returns incorrect and invalid date strings
> -------------------------------------------------------------
>
> Key: DERBY-4752
> URL: https://issues.apache.org/jira/browse/DERBY-4752
> Project: Derby
> Issue Type: Bug
> Components: Services
> Affects Versions: 10.7.0.0
> Reporter: Knut Anders Hatlen
> Priority: Minor
>
> CheapDateFormatter has multiple problems. These are the ones I'm aware of:
> 1) On the boundary between non-leap years and leap years it will return first
> day of thirteenth month in previous year (for instance, 2011-13-01 instead of
> 2012-01-01)
> 2) It treats all years divisible by four as leap years. Those divisible by
> 100 and not by 400 are not leap years. It attempts to adjust for that (see
> the snippet below) but it always ends up setting leapYear=true if (year%4)==0.
> // It's a leap year if divisible by 4, unless divisible by 100,
> // unless divisible by 400.
> if ((year % 4L) == 0) {
> if ((year % 100L) == 0) {
> if ((year % 400L) == 0) {
> leapYear = true;
> }
> }
> leapYear = true;
> }
> 3) More leap year trouble. To find out which year it is, it calculates the
> number of four year periods that have elapsed since 1970-01-01. A four year
> period is considered 365*3+366 days. Although most four year periods are of
> that length, some are shorter, so we'll get one day off starting from year
> 2100, two days off from year 2200, and so on.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.