2010-12-07 22 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」也被打破。

葉夫根尼·