You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Yandell (JIRA)" <ji...@apache.org> on 2009/12/17 07:04:18 UTC

[jira] Commented: (LANG-538) DateFormatUtils.format does not correctly change Calendar TimeZone in certain situations

    [ 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.