我试图理解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:00
和2014-01-19T00:00:00.000+04:30
,则它们指的是同一时刻。因此getTimeInMillis()
应该返回的UTC时间应该是相同的,但是你会发现存在差异。这种情况的差异是以小时为单位的4.5小时,这是第二个时间字符串中的时区偏移量。
不确定我的理解在哪里出错。
答案 0 :(得分:1)
如果偏移量为+00:00,则为UTC时间。
如果偏移量不同,例如+04:30,则必须从本地时间(偏移部分之前的左侧部分)中减去此偏移量,以便获得UTC时间。
最后,在相同的当地时间但不同的偏移量,您将获得不同的UTC时间!通用公式为:
UTC + offset = (local time)