SimpleDateFormat 忽略 Android 中的 DST 偏移量



在中欧,当前时区(截至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 很慢这使它运行得更快。

相关内容

  • 没有找到相关文章

最新更新