2

我一直在搜索,只是找不到发生这种情况的解释或原因,但 DateFormat 的 parse(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

这与我想要的完全不同,为什么现在是格林威治标准时间之后的一年?为什么没有逗号了?为什么日期是在月份之后?

我现在对此完全感到困惑并且找不到解决方案,但我真的需要日期采用这种格式。逗号是不是把事情搞砸了?还是冒号?

谢谢你的时间,

无限化

附言

忘了提这一点,但我试过 dateformat.setLenient(false) 并没有什么区别。

聚苯乙烯

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

尽管它们看起来相同但只是格式不同,但它们并不相同,因为在对它们都调用 getTime() 之后(当我提供了 2 个相同的日期时),long 不一样。如日期所示:

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

如果我输入字符串“Thu,2010 年 11 月 11 日 19:38:52 GMT”,然后在使用 parse() 将字符串转换为日期后比较它们的 long,然后在该日期调用 getTime(),我得到:

lastModified = 1289504332671 fromString = 1289504332000

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

再次感谢您的宝贵时间,对不起,我没有先放这一点,

无限化

4

1 回答 1

8

结果格式是默认格式Date#toString()(点击链接查看javadoc)。你显然在做一个System.out.println(date). 您想SimpleDateFormat#format()改用另一种模式来将其格式化为所需的格式。例如

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

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

于 2010-11-12T17:42:52.503 回答