小编典典

使用DateFormat将字符串解析为Date不能正确解析

java

我一直在搜索,只是找不到解释或原因,但DateFormat的parse(String)方法只是不能正确解析我的String。

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

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),它没有任何区别。

PPS

我正在尝试执行此操作以将日期与date1.before(date2)和after()等进行比较,以查看一个是否比另一个更新,但是由于解析不起作用,我无法执行此操作。

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

2010年11月11日星期四,格林尼治标准时间(GMT),用于文件上的lastModified()

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

lastModified = 1289504332671 fromString = 1289504332000

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

再次感谢您抽出宝贵的时间,对不起,我没有将此放在首位,

英菲尼迪菲兹


阅读 335

收藏
2020-10-16

共1个答案

小编典典

结果格式是的默认格式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。

2020-10-16