android 2.3 中的 SimpleDateFormat 中的时区被破坏

发布于 2024-10-06 11:04:19 字数 1247 浏览 5 评论 0原文

Android 2.3 于昨晚刚刚发布。所以很自然地,我尝试了我的应用程序,发现存在日期格式问题。我注意到 DateFormatter 产生不同的格式。因此,在一个简单的 Java 程序中执行此操作:

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

输出是

美国东部时间 2010 年 12 月 7 日上午 11:49:40

在 Android 模拟器中执行相同的操作,您将得到

2010 年 12 月 7 日上午 11:42:50 GMT-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)

Android 2.3 was recently released last night. So naturally I tried my app on it and found there was date formatting issue. I have noticed the DateFormatter produces different formats. So do this in a simple Java program:

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

Output is

December 7, 2010 11:49:40 AM EST

Do the same thing in an android emulator and you get

December 7, 2010 11:42:50 AM GMT-05:00

Notice the different time zone. Has anybody ran in to this issue? Is there another formatter I can use that doesn't depend on Java's implementation?

EDIT:
Ok so here is more detail to why I think this is broken:

Using this code:

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

I tried to parse a date but the following error is thrown:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

阳光下慵懒的猫 2024-10-13 11:04:19

输出没有任何问题。
您创建一个 DateFormat - 依赖于默认 Locale< 的实例/a>.在不同的机器上,不同的 java 安装,默认区域设置有所不同,因此与区域设置相关的操作的输出也不同,这并不罕见。在这种情况下,默认的 TimeZone 是不同的,但问题中的两个输出代表相同的日期,以相同的格式字符串 MMMMM d, yyyy hh:mm:ss a z 打印。

更新:
Android 2.3 中的 parse() 将与诸如 GMT+xxxx 等时区一起使用,但它无法将 EST 识别为用于解析的有效时区。如果您使用 TimeZone.getTimeZone("EST"),Android 就会识别 EST

更新2:

三字母时区ID“EST”、“HST”和“MST”已弃用。请勿使用它们。

There is nothing wrong with the output.
You create a DateFormat-Instance which depends on the default Locale. It is not unusual that on different machines, different java-installations the default Locale vary and so the output of locale-dependent operations. In this case the default TimeZone is different, but the two outputs in your question represent the same Date, printed with the same format String MMMMM d, yyyy hh:mm:ss a z.

UPDATE:
parse() in Android 2.3 will work with TimeZones like GMT+xxxx etc, but it doesn't recognize EST for example as a valid TimeZone for parsing. Android knows about EST if you use TimeZone.getTimeZone("EST").

UPDATE2:

Three-letter timezone IDs "EST", "HST", and "MST" are deprecated. Do not use them.

铁憨憨 2024-10-13 11:04:19

两者都是相同的时区,只是表示不同

Both are same TimeZone just different representation

新人笑 2024-10-13 11:04:19

看起来对模式“EEE MMM dd HH:mm:ss zzz yyyy”的支持也被破坏了。

叶夫盖尼

Looks like support for pattern "EEE MMM dd HH:mm:ss zzz yyyy" is also broken.

Evgueni

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文