在中欧,目前的时区(截至10月3日)是:
CEST / 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时间库。
当然,我的机器上正确设置了时区。
答案 0 :(得分:1)
我刚刚切换到JODA很棒。
它在Android上运行良好,此链接中包含以下注释: Android Java - Joda Date is slow 这使它运行得更快。
答案 1 :(得分:1)
我不知道我是否正确理解了您的用例,但是从我在尝试此代码时所理解的情况来看。
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