2010-11-12 79 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