2010-12-07 71 views
1

Android 2.3最近在昨晚发布。所以自然我尝试了我的应用程序,发现有日期格式问题。我注意到DateFormatter产生不同的格式。所以这样做是一个简单的Java程序:TimeZone在Android 2.3中的SimpleDateFormat中破解

((SimpleDateFormat)DateFormat.getDateTimeInstance(DateFormat.LONG, 
    DateFormat.LONG)).format(new Date()); 

输出是2010年12月7日上午十一时49分40秒EST

不要在Android仿真器同样的事情,

2010年12月7日上午十一时42分50秒格林尼治标准时间05:00

注意不同的时区。有没有人遇到过这个问题?有没有另一种我可以使用的格式化程序,它不依赖于Java的实现?

编辑: 好了,所以这里是更详细的为什么我认为这是坏:

使用此代码:

private final DateFormat format = 
    new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z"); 

我试图解析一个日期,但下面的错误被抛出:

12-07 12:55:49.556: ERROR/DateDeserializer(847): Error when parsing date 
    java.text.ParseException: Unparseable date: "Mon, 06 Dec 2010 17:13:35 EST" 
    at java.text.DateFormat.parse(DateFormat.java:626) 
    at com.currency.mobile.client.DateDeserializer 
     .deserialize(DateDeserializer.java:31) 
    at com.currency.mobile.client.DateDeserializer 
     .deserialize(DateDeserializer.java:19) 
    at org.codehaus.jackson.map.deser.SettableBeanProperty 
     .deserialize(SettableBeanProperty.java:149) 
+0

ps的,如果我删除EST和z然后一切正常 – 2010-12-07 18:07:58

回答

1

输出没有问题。 您将创建一个DateFormat -Instance,这取决于默认的Locale。在不同的机器上,不同的java安装并不少见,默认的locale不同,所以依赖于locale的操作的输出也不例外。在这种情况下,默认TimeZone是不同的,但在您的问题中的两个输出表示相同的日期,印有相同的格式字符串MMMMM d, yyyy hh:mm:ss a z

UPDATE: 解析()中的Android 2.3将与像GMT+xxxx等时区工作,但它并不适用于例如承认EST作为解析有效的时区。如果您使用TimeZone.getTimeZone("EST"),则Android知道约EST

UPDATE2:

Three-letter timezone IDs "EST", "HST", and "MST" are deprecated.不要使用它们。

1

两者都是相同的TimeZone只是不同的表示

+0

是的,我注意到了。除了DateFormat.parse()现在被破坏。因为它不支持那种模式 – 2010-12-07 16:57:10

+0

@Amir:你为什么认为`parse()`不能处理这个? – 2010-12-07 17:11:22

+0

我会在第二秒钟内添加更多细节 – 2010-12-07 17:53:35

1

看起来像支持模式“EEE MMM dd HH:mm:ss zzz yyyy”也被打破。

叶夫根尼·