【发布时间】:2010-04-08 20:20:17
【问题描述】:
我正在使用java.text.SimpleDateFormat 来解析 XML 文档中日期/时间值的字符串表示形式。我看到所有具有 12 小时值的时间在未来移动了 12 小时,即。 e.中午过去 20 分钟被解析为第二天午夜过去 20 分钟。
我编写了一个单元测试,它似乎确认了解析时出错(我使用 linux shell 命令date 检查了来自getTime() 的返回值)。现在我想知道:
-
parse()方法中是否存在错误? - 输入的字符串有问题吗?
- 我是否使用了错误的输入格式字符串?
输入数据取自雅虎的 YWeather 服务。这是测试及其输出:
public class YWeatherReaderTest
{
public static final String[] rgDateSamples = {
"Thu, 08 Apr 2010 12:20 PM CEST",
"Thu, 08 Apr 2010 12:20 AM CEST"
};
public void dateParsing() throws ParseException
{
DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy K:m a z",
Locale.US);
for (String dtsSrc : YWeatherReaderTest.rgDateSamples) {
Date dt = formatter.parse(dtsSrc);
String dtsDst = formatter.format(dt);
System.out.println(dtsSrc);
System.out.println(dtsDst);
System.out.println();
}
}
}
2010 年 4 月 8 日星期四 12:20 PM CEST
2010 年 4 月 9 日星期五 0:20 AM CEST
2010 年 4 月 8 日星期四 12:20 AM CEST
2010 年 4 月 8 日星期四 0:20 PM CEST
第二次迭代的第二行输出有点奇怪,因为 00:20 不是 PM。但是,Date 对象的毫秒值对应于中午过去 20 分钟的(错误)时间。
【问题讨论】:
-
这是另一个很好的“SELECT 没有损坏”的例子。即使我从来没有遇到过成熟且广泛使用的标准库中的错误,但如果我找不到问题,我有时仍然会指责该库。到目前为止,我一直被证明是错误的。