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:06:18 UTC

[jira] Closed: (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:all-tabpanel ]

Henri Yandell closed LANG-538.
------------------------------

    Resolution: Fixed

Thanks for the report Jeff. I've inserted a getTime() into FastDateFormat that fixes your test case, and hopefully extends to the general problem.

svn ci -m "Fixing LANG-538 - you need to call getTime() on a calendar sometimes to get it in the right state, otherwise the timezone gets out of whack. " src
Sending        src/java/org/apache/commons/lang3/time/FastDateFormat.java
Sending        src/test/org/apache/commons/lang3/time/FastDateFormatTest.java
Transmitting file data ..
Committed revision 891542.


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