在中欧,当前时区(截至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时间库。
而且,当然,时区已在我的机器上正确设置。
最佳答案
我不知道我是否正确理解了您的用例,但是从尝试该代码时所了解的不知道。
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
关于java - SimpleDateFormat忽略Android中的DST偏移量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12715216/