2013-06-25 86 views
1

我試圖格式化Date對象,並轉換格式即一回日期類型的對象
這是我的代碼日期格式返回錯誤的日期

SimpleDateFormat inputDf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz"); 
System.out.println("before format "+invoiceDate); 
invoiceDate=inputDf.parse(inputDf.format(invoiceDate)); 
System.out.println("after format "+inputDf.format(invoiceDate)); 
System.out.println("after parse "+invoiceDate); 

走出上面的代碼把被

before format : Mon Jan 14 10:55:40 IST 2013 
after format : Mon Jan 14 2013 10:55:40 IST 
after parse : Mon Jan 14 10:55:40 IST 2013 

你可以在這裏看到後,我解析日期對象它轉換回原始格式(format之前顯示的格式),但我希望Date對象就像它出現在第二個打印行(格式之後)的事情是.format方法返回String不是一個Date對象,我該如何解決這個問題?

由於

回答

1

此行爲是因爲SimpleDateFomat不會在日期上施加壓力。 SimpleDateFormat只是一種模式,可以從任何Date中獲取格式化輸出,但它不會更改日期本身。 Date沒有格式,所以

System.out.println("before format "+invoiceDate); 

默認爲默認模式格式。

實際上,SimpleDateFormat就是實現你想要的東西的方法,也就是說,在你需要的時候用它來正確地格式化你的輸出。格式化日期對象會給你一個表示,一個String

+0

我可以理解你在說什麼,那麼我怎樣才能改變給定日期的格式而不將它轉換爲字符串?我想改變在db查詢中使用它的格式 – user1573690

+0

@ user1573690:你可以在db查詢中使用任何格式,是否要插入記錄,如果是這樣,日期格式不重要 –

+0

否其實際選擇查詢對於MongoDB集合 – user1573690

6

Date對象沒有定義任何格式。 Date只是一個長時間的數字。 爲了修改其格式,您必須使用String對象,就像您在示例中所做的那樣。

如果你分析你的例子:

  • 格式之前:顯示一個DateSystem.out.println提供的默認格式。
  • 格式化後:顯示使用SimpleDateFormat後給出的格式。
  • 解析後:我們再次處於第一種情況。
+0

我想用我的格式(「EEE MMM dd yyyy HH:mm:ss zzz」)作爲Date對象(不是字符串)的最終輸出。我怎麼能在這種情況下做到這一點? – user1573690

1
System.out.println("after parse "+invoiceDate); 

在這裏,你只是想打印Date對象。 Date對象本身沒有任何格式。 Date類表示特定時間點,具有毫秒精度。因此,我們使用DateFormat來格式化打印在打印Date對象上的輸出字符串。要顯示與第二條語句相同的輸出,您需要再次格式化它。

System.out.println("after parse"+inputDf.format(invoiceDate)); 

看的Javadoc實施toString()Date

此日期對象轉換爲以下形式的字符串:

道康寧週一DD HH:MM:SS ZZZ yyyy