簡體   English   中英

用Java格式化日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM