理解XMLGregorianCalendar / GregorianCalendar时间,以毫秒为单位

时间:2014-04-09 14:21:48

标签: java xml utc timezone-offset

我试图理解Java中getTimeInMillis()对象的GregorianCalendar方法。

考虑下面的代码段

        XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000-00:00");
        XMLGregorianCalendar cal1 = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000+04:30");
        System.out.println(cal.toGregorianCalendar().getTimeInMillis());
        System.out.println(cal1.toGregorianCalendar().getTimeInMillis());

输出如下

1390089600000
1390073400000

这就是我的困惑所在。如果您看到输入时间2014-01-19T00:00:00.000-00:002014-01-19T00:00:00.000+04:30,则它们指的是同一时刻。因此getTimeInMillis()应该返回的UTC时间应该是相同的,但是你会发现存在差异。这种情况的差异是以小时为单位的4.5小时,这是第二个时间字符串中的时区偏移量。

不确定我的理解在哪里出错。

1 个答案:

答案 0 :(得分:1)

如果偏移量为+00:00,则为UTC时间。

如果偏移量不同,例如+04:30,则必须从本地时间(偏移部分之前的左侧部分)中减去此偏移量,以便获得UTC时间。

最后,在相同的当地时间但不同的偏移量,您将获得不同的UTC时间!通用公式为:

UTC + offset = (local time)