- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用带有 RFC 1123 的 SimpleDateFormat 来格式化日期和解析日期。但是,parse(format(date)) 有时会与原始日期相差一小时。
下面的代码:
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)
,而不是使用1234ms。同样的问题仍然发生。
最佳答案
我尝试了第一个模式“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
关于java - SimpleDateFormat 解析时间为一小时(使用 RFC 1123,夏季为 GMT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584647/
我使用带有 RFC 1123 的 SimpleDateFormat 来格式化日期和解析日期。但是,parse(format(date)) 有时会与原始日期相差一小时。 下面的代码: public st
我是一名优秀的程序员,十分优秀!