在中欧,当前时区(截至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/

10-09 18:52