2010-11-12 46 views
2

我一直在寻找所有,只是找不到解释或为什么发生这种情况,但DateFormat的解析(字符串)方法只是不解析我的字符串正确。解析一个字符串到日期与DateFormat不正确解析

我试图解析字符串成用于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 

哪个什么都不是我想要的,为什么在格林威治标准时间之后的今年呢?为什么没有逗号了?为什么是这个月之后的日期?

我对此感到十分困惑,无法找到解决方案,但我确实需要使用该格式的日期。逗号是否搞乱了事情?或冒号?

感谢您的时间,

Infinitifizz

附:

忘了提这个,但我试过dateformat.setLenient(false),它没有区别。

PPS

我试图做到这一点的日期与date1.before(date2的)比较和后()等,以查看是否有比其他新的,但我不能这样做,因为解析不起作用。

即使它们看起来相同,但格式不同,它们并不相同,因为它们都在调用getTime()之后(当我提供了2个相同的日期时),多个长度并不相同。正如在日期为:

周四,11十一月2010 19时38分52秒格林尼治标准时间为上次更改时间()上的一个文件

如果我输入字符串“周四2010 GMT 19时38分52秒11月11日“然后比较他们渴望用解析()将字符串一旦转换为日期,然后在该日期调用的getTime()我得到:

的LastModified = 1289504332671 fromString = 1289504332000

只有最后3数字不同,这是否有任何意义?再次

感谢您的时间和抱歉,我没有把这个位在第一,

Infinitifizz

回答

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。

+0

很好的答案(+1)。当这个问题出现时,我立即停止了对我的工作。 – 2010-11-12 17:45:35

+0

我不知道我理解你。我想从字符串中获取日期,而不是日期中的字符串,这就是为什么我使用parse()而不是format()。 – 2010-11-12 17:47:59

+0

对不起,我想我明白了!所以,因为我只是使用System.out.println(dateFromString),它使用默认的toString()而不是格式化的。所以作为一段完整的代码,我得到一个String(我想要的格式的日期)解析成我想使用的日期,但这不是我想要的格式,然后使用format()来获取它从默认格式转换成我想要的格式?编辑:“...格式化为我想要显示它的格式?” – 2010-11-12 17:50:41