2014-01-10 234 views
1

我在使用Java格式化日期時遇到問題。日期格式化程序似乎使用BST(英國夏令時)分析我的字符串,而不是以下代碼中dateStr字符串中+0000定義的GMT + 0。格式化日期爲Java

String dateStr = "Tue Oct 02 01:06:00 +0000 2012"; 
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
Date date = df.parse(dateStr); 

// Test the date   
System.out.println(date.toString()); 

當我運行上面的代碼我得到:

Tue Oct 02 02:06:00 BST 2012 

這顯然不是我想要的。一個有用的信息點可能是,當我運行以下命令:

System.out.println(TimeZone.getDefault().getDisplayName()); 

我得到:

Greenwich Mean Time 

我試圖讓輸出是

Tue Oct 02 01:06:00 GMT 2012 

我已經已經在df上嘗試過.setTimeZone,但無濟於事。

+0

您的意思是在您的預期輸出中說GMT嗎?你說BST似乎與你的討論相矛盾。 –

+0

Woops。是!編輯它。 –

回答

1

.toString()方法在打印日期時使用您的語言環境。

用途:

SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"); 
format.setTimeZone(TimeZone.getTimeZone("GMT")); 
System.out.println(format.format(date)); 
0

據我所知,BST在SE已經過時7.

0

你可以嘗試喜歡這裏:

DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", 
       Locale.CANADA); 

本地ARGS添加到SimpleDateFormat構造

2

請注意,Tue Oct 02 02:06:00 BST 2012與Tue Oct 01 01:0 2012年6:00 +0000,剛剛在不同的時區表示。 java.util.Date並不真正處理時區,因此就其而言,沒有區別。您構建的Date對象代表您想要的正確日期和時間。

Date.toString()方法本質上只是一個格式化程序,它在其格式中使用您的JRE默認TimeZone。如果要測試Date對象是否正確,則應該構建一個java.util.Date對象(使用java.util.Calendar - 大多數Date構造函數已被棄用)進行測試。如果你想創建一個顯示字符串,那麼你應該使用已經創建的SimpleDateFormatter實例來格式化Date對象。

如果確實需要存儲TimeZone信息的對象,則應使用java.util.Calendar。無論如何,java.util.Date幾乎不推薦使用。或者,照我所做的一樣,等待Java 8中出現新的Data and Time API。