在中欧,当前时区(截至10月3日)为:
中欧夏令时/UTC+2
但是当我现在在 Android 中创建SimpleDateFormat
实例时......
dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
。它返回CET / UTC+1
作为时区。因此,它忽略了目前必须仍然存在的DST偏移量。这是为什么呢?
此外,当使用(现已弃用)方法getTimezoneOffset()
Date
实例时,它会返回不一致的结果:
(new Date()).getTimezoneOffset()
正确返回 -120(2 小时),而dateTimeFormat.parse("2012-10-03T22:00:00.000+0000").getTimezoneOffset()
返回 -60(1 小时)。
怎么会这样?我做错了什么还是这是一个已知的错误?
注意:我听说有些库提供更好的时间计算(例如Joda Time),我听说现在经常;)但是使用一些解决方法,您可以同样轻松地使用内置的 Java 时间库。
而且,当然,时区在我的机器上设置正确。
我是否正确理解了您的用例,但从我尝试此代码时所理解的内容来看。
public static void main(String[] args) {
SimpleDateFormat dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
String date="2012-10-03T22:00:00.000+0000";
try {
System.out.println(dateTimeFormat.getTimeZone().getDisplayName());
System.out.println("Today : "+new Date().toString()+ ", Timezone Offset :" +
+(new Date()).getTimezoneOffset());
System.out.println("Parsed Date : "+
dateTimeFormat.parse(date).toString()
+ ", Timezone Offset : "
+dateTimeFormat.parse(date).getTimezoneOffset());
} catch (ParseException e) {
e.printStackTrace();
}
}
我得到了一致的输出,即:
Central European Time
Today : Wed Oct 03 09:44:56 CEST 2012, Timezone Offset : -120
Parsed Date : Wed Oct 03 23:00:00 CEST 2012, Timezone Offset : -120
我刚刚切换到 JODA 很棒。
它也适用于Android,并在此链接中的评论中:Android Java - Joda Date 很慢这使它运行得更快。