【发布时间】:2010-11-06 15:59:11
【问题描述】:
在使用 SimpleDateFormat 解析 ISO8601 日期和时间时,我遇到了一个奇怪的问题。相关代码为:
public class DateHelper
{
private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public static Date parseISO8601(String date) throws ParseException
{
Date result = iso8601formatter.parse(date);
return result;
}
}
对于输入,我给它一个字符串
2010-09-06T15:30:00+02:00
作为回报,我得到一个 Date 对象,其日期设置为 2010 年 1 月 6 日,时间为 13:30,时区为 GMT+00:00。
编辑:我也尝试使用“2010-09-06T15:30:00+0200”,结果相同。
令人困惑的是,日期设置部分正确,只是月份设置错误。
问题在 Android 1.6 和 Android 2.2 上显示。
我该如何解决?
【问题讨论】:
-
可能无关紧要,但是执行此代码的计算机位于哪个时区?格林威治标准时间+2?
-
在我的 2.2 模拟器中运行良好。您的具体设置是什么(模拟器、手机、版本)以及如何检查生成的
Date对象(调试、日志)? -
@Josef 我正在使用 1.6 模拟器进行测试。但是我注意到了这个问题,因为我的 GUI 显示 1 月份的日期,并且在安装 1.6 Sense 的 HTC Tatto、安装 2.1 的 HTC Hero 和安装 2.2 的 G1 上都注意到了这一点。 @cherouvim Computer 目前处于 GMT+1 (CET)。也许重要的是要注意我在夏令时更改后注意到了这个问题。
标签: java android parsing date simpledateformat