我正在使用SimpleDateFormat和RFC 1123格式化日期並解析日期。但是,解析(格式(日期))有時與原始日期有一小時不同。SimpleDateFormat解析是一個小時(在夏季使用RFC 1123,GMT)
下面的代碼:
public static void main(String[] args) throws ParseException {
String RFC1123_DATE_PATTERN = "EEE, dd MMM yyyy HH:mm:ss zzz";
SimpleDateFormat dateFormat = new SimpleDateFormat(RFC1123_DATE_PATTERN);
Date date = new Date(1000);
String str = dateFormat.format(date);
Date date2 = dateFormat.parse(str);
System.out.println("date="+date+"; "+date.getTime());
System.out.println("str="+str);
System.out.println("date2="+date2+"; "+date2.getTime());
}
寫出:
date=Thu Jan 01 01:00:01 GMT 1970; 1000
str=Thu, 01 Jan 1970 01:00:01 GMT
date2=Thu Jan 01 02:00:01 GMT 1970; 3601000
我從apache.http.util.DateUtil這種模式因此預計它[1]的工作。
大概這是GMT是否包含或不包括夏令時的混淆?
我正在使用Java™SE運行時環境(構建1.6.0_31-b04-415-10M3646,也在1.7.0_71上測試過)。
一種解決方法是使用圖案 「EEE,DD MMM YYYY HH:MM:SS Z」,其給出:
date=Thu Jan 01 01:00:01 GMT 1970; 1000
str=Thu, 01 Jan 1970 01:00:01 +0100
date2=Thu Jan 01 01:00:01 GMT 1970; 1000
[1] http://www.docjar.com/html/api/org/apache/http/util/DateUtils.java.html
編輯:如每@ oscar-castiblanco的評論,我已將它更改爲new Date(1000)
,而不是使用1234ms。同樣的問題仍然存在。
什麼'System.out.println(TimeZone.getDefault())'打印? – Roman