我使用SimpleDateFormat和RFC 1123来格式化日期和解析日期。但是,解析(格式(日期))有时与原始日期不同一小时。
以下代码:
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(TM)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)
,而不是使用1234毫秒。同样的问题仍然存在。
答案 0 :(得分:1)
我尝试了第一个模式“EEE,dd MMM yyyy HH:mm:ss zzz”,我得到了这个答案
date=Thu Jan 01 01:00:01 CET 1970; 1234
str=Thu, 01 Jan 1970 01:00:01 CET
date2=Thu Jan 01 01:00:01 CET 1970; 1000
我尝试了第二种模式,得到了相同的答案。
为了在两种情况下都有相同的时间,我将转换的缺失毫秒添加到模式中:
pattern =“EEE,dd MMM yyyy HH:mm:ss:SSS Z”
date=Thu Jan 01 01:00:01 CET 1970; 1234
str=Thu, 01 Jan 1970 01:00:01:234 +0100
date2=Thu Jan 01 01:00:01 CET 1970; 1234
答案 1 :(得分:0)
GMT没有夏令时。在英国,我们生活在“英国标准时间”,它具有夏令时。 “格林威治标准时间”是世界参考时间,没有夏令时。然而,微软弄错了,这有助于播下混乱。