1

在中欧,当前时区(截至 10 月 3 日)是:

CEST / UTC+2

SimpleDateFormat但是当我现在在Android中创建一个实例时......

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 时间库.

而且,当然,时区在我的机器上设置正确。

4

2 回答 2

1

我刚刚切换到 JODA,非常棒。

它在 Android 上也可以很好地使用此链接中的评论: Android Java - Joda Date is slow That make it run faster.

于 2012-10-09T09:03:35.157 回答
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
于 2012-10-12T08:31:33.173 回答