将字符串解析为Date,而DateFormat无法正确解析

时间:2010-11-12 17:40:07

标签: java datetime date date-format date-parsing

我一直在搜索,但是找不到解释或原因,但是DateFormat的解析(String)方法并没有正确解析我的字符串。

我正在尝试将字符串解析为用于HTTP标头的日期格式,并且尽可能地获取字符串,例如:

Thu, 11 Nov 2010 18:34:22 GMT

格式如下:

E, d MMM yyyy HH:mm:ss z

但是当我使用df.parse(dateStr);时,这就是我从中得到的结果:

Thu Nov 11 18:34:22 GMT 2010

这与我想要的完全不同,为什么GMT之后的那一年呢?为什么不再有逗号?为什么月份之后的日期呢?

我现在对此完全感到困惑,无法找到解决方案,但我确实需要以该格式提供日期。逗号弄乱了吗?还是冒号?

感谢您的时间,

Infinitifizz

P.S。

忘记提及这个,但我已经尝试过dateformat.setLenient(false),但没有区别。

P.P.S

我正在尝试将日期与date1.before(date2)和after()等进行比较以查看是否有一个比另一个更新但我不能这样做,因为解析不起作用。

即使它们看起来相同但只是格式不同,它们也不一样,因为在它们两个上调用getTime()后(当我提供了2个相同的日期时),长度不一样。与日期一样:

2010年11月11日星期四19:38:52 GMT对文件中的lastModified()

如果我输入字符串“星期四,2010年11月11日19:38:52 GMT”,然后比较他们的长片一旦使用parse()将字符串转换为日期,然后在该日期调用getTime(),我得到:< / p>

lastModified = 1289504332671 fromString = 1289504332000

只有最后3位数字不同,这有什么意义吗?

再次感谢您的时间和抱歉,我没有把这一点放在第一位,

Infinitifizz

1 个答案:

答案 0 :(得分:8)

结果格式是Date#toString()的默认格式(单击链接以查看javadoc)。你显然正在做System.out.println(date)。您希望使用SimpleDateFormat#format()而不是其他模式以所需格式对其进行格式化。 E.g。

String newDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);

更新:使用Date时,您不应该关心格式。当Date转换(显示)为String时,您应该只关心此时的格式。至于时间戳的差异,Date使用毫秒精度作为时间戳,而HTTP头使用第二精度。在比较之前,您希望将时间戳除以1000。