Looks like the specifcation of the methods in the JDK changed between Java 6 and 7 http://docs.oracle.com/javase/6/docs/api/java/util/TimeZone.html#getDisplayName%28%29 http://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getDisplayName%28%29
But even so, its an odd bit of code. I've changed it to getID() in git. thanks Stephen 2012/2/9 Steve Livengood <[email protected]>: > Hi, > > I've run into a problem using the Dalvik VM (Android) with the time zone > conversion functions. Specifically, the implementation of > DateTimeZone.forTimeZone() fails when the Java timezone is a GMT+/-hh:mm > format if the current locale is not a western locale. You can easily see the > failure by using this code snippet: > > Locale.setDefault(Locale.CHINA); > TimeZone sTimeZone = java.util.TimeZone.getTimeZone("GMT-01:00"); > System.out.println(Locale.getDefault()); > System.out.println(sTimeZone.getDisplayName()); > DateTimeZone dtz = DateTimeZone.forTimeZone(sTimeZone); > System.out.println(dtz.getID()); > > The invocation of DateTimeZone.forTimeZone() will throw an > IllegalArgumentException when using a VM that localizes time zones for > display purposes (specifically, when using the Dalvik VM). > > The code in question is: > > public static DateTimeZone forTimeZone(TimeZone zone) { > > .... other code here that converts named time zones .... > > // Support GMT+/-hh:mm formats > if (convId == null) { > convId = zone.getDisplayName(); > if (convId.startsWith("GMT+") || convId.startsWith("GMT-")) { > convId = convId.substring(3); > int offset = parseOffset(convId); > if (offset == 0L) { > return DateTimeZone.UTC; > } else { > convId = printOffset(offset); > return fixedOffsetZone(convId, offset); > } > } > } > throw new IllegalArgumentException("The datetime zone id '" + id + "' is > not recognised"); > > Specifically, the line, convId = zone.getDisplayName(). This returns the > locale-specific display name for the time zone. In the Sun VM, when the time > zone is a custom GMT+nn:nn or GMT-nn:nn, the display name is also of this > same form for every locale. However, in the Dalvik VM, it is properly > localized. For example, when the local is zh, the display name for GMT+0100 > is 格林尼治标准时间+0100 (assuming you're reading this using a font with > Chinese characters, you can see that GMT has been localized). Other locales > localize differently, including some that localize the numeric portion as > well. > > At the *very* least, shouldn't this be convId = > zone.getDisplayName(Locale.US)? Or, really, shouldn't this simply use the > time zone ID, that is convId = zone.getId()? > > Thanks, > > Steve Livengood > Samsung Electronics > Irvine, CA 92612 > > > > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Joda-interest mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/joda-interest ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Joda-interest mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/joda-interest
