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 Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest