[ 
https://issues.apache.org/jira/browse/LANG-538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12791798#action_12791798
 ] 

Henri Yandell commented on LANG-538:
------------------------------------

I think this is due to FastDateFormat's:

        if (mTimeZoneForced) {
            calendar = (Calendar) calendar.clone();
            calendar.setTimeZone(mTimeZone);
        }

If I call getTime() before that, then the code works. If however I wait until 
after that to call getTime(), it does not work. The calendar before and after 
report themselves to be equal, and their toString contains the same information 
in both cases, yet something must not be getting lazy-initialized and then lost 
in the clone.

> DateFormatUtils.format does not correctly change Calendar TimeZone in certain 
> situations
> ----------------------------------------------------------------------------------------
>
>                 Key: LANG-538
>                 URL: https://issues.apache.org/jira/browse/LANG-538
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.time.*
>    Affects Versions: 2.4
>         Environment: Sun JDK6, RHEL 5.3
>            Reporter: Jeff Peterson
>             Fix For: 3.0
>
>
> If a Calendar object is constructed in certain ways a call to 
> Calendar.setTimeZone does not correctly change the Calendars fields.  Calling 
> Calenar.getTime() seems to fix this problem.  While this is probably a bug in 
> the JDK, it would be nice if DateFormatUtils was smart enough to 
> detect/resolve this problem.
> For example, the following unit test fails:
> {noformat}
>   public void testFormat_CalendarIsoMsZulu() {
>     final String dateTime = "2009-10-16T16:42:16.000Z";
>     // more commonly constructed with: cal = new GregorianCalendar(2009, 9, 
> 16, 8, 42, 16)
>     // for the unit test to work in any time zone, constructing with GMT-8 
> rather than default locale time zone
>     GregorianCalendar cal = new 
> GregorianCalendar(TimeZone.getTimeZone("GMT-8"));
>     cal.clear();
>     cal.set(2009, 9, 16, 8, 42, 16);
>     FastDateFormat format = 
> FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", 
> TimeZone.getTimeZone("GMT"));
>     assertEquals("dateTime", dateTime, format.format(cal));
>   }
> {noformat}
> However, this unit test passes:
> {noformat}
>   public void testFormat_CalendarIsoMsZulu() {
>     final String dateTime = "2009-10-16T16:42:16.000Z";
>     GregorianCalendar cal = new 
> GregorianCalendar(TimeZone.getTimeZone("GMT-8"));
>     cal.clear();
>     cal.set(2009, 9, 16, 8, 42, 16);
>     cal.getTime();
>     FastDateFormat format = 
> FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", 
> TimeZone.getTimeZone("GMT"));
>     assertEquals("dateTime", dateTime, format.format(cal));
>   }
> {noformat}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to