[英]Formatting date in Java
我在使用Java格式化日期時遇到問題。 日期格式化程序似乎使用BST(英國夏令時)解析我的字符串,而不是在下面的代碼中的dateStr字符串中由+0000定義的GMT + 0。
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,但無濟於事。
請注意,TUE Oct 02 02:06:00 BST 2012與Tue Oct 02 01:06:00 +0000 2012同時,僅在不同的時區表示。 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中出現的新數據和時間API。
打印日期時, .toString()
方法正在使用您的語言環境。
采用:
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(format.format(date));
據我所知,BST已在SE 7中棄用。
你可以試試這里:
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy",
Locale.CANADA);
將Local args添加到SimpleDateFormat
構造函數中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.