android 2.3 中的 SimpleDateFormat 中的时区被破坏
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
输出没有任何问题。
您创建一个 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 recognizeEST
for example as a valid TimeZone for parsing. Android knows aboutEST
if you useTimeZone.getTimeZone("EST")
.UPDATE2:
Three-letter timezone IDs "EST", "HST", and "MST" are deprecated. Do not use them.
两者都是相同的时区,只是表示不同
Both are same TimeZone just different representation
看起来对模式“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