Java 以毫秒为单位理解XMLGregorianCalendar/GregorianCalendar时间
我试图理解Java中Java 以毫秒为单位理解XMLGregorianCalendar/GregorianCalendar时间,java,xml,utc,timezone-offset,Java,Xml,Utc,Timezone Offset,我试图理解Java中GregoriaCalendar对象的getTimeInMillis()方法 考虑下面的代码片段 XMLGregorianCalendar cal = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-01-19T00:00:00.000-00:00"); XMLGregorianCalendar cal1 = DatatypeFactory.newInstance().ne
GregoriaCalendar
对象的getTimeInMillis()
方法
考虑下面的代码片段
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小时,以毫秒表示,这是第二个时间字符串中的时区偏移量
不确定我的理解哪里出错。如果偏移量为+00:00,则为UTC时间 如果偏移不同,例如+04:30,则必须从本地时间(偏移部分之前的左部分)中减去该偏移,以获得UTC时间 最后,使用相同的本地时间但不同的偏移量,您将获得不同的UTC时间!一般公式为:
UTC + offset = (local time)
输入时间如何相同?我遗漏了什么?你的陈述“他们指的是同一个实例”令人困惑,因为你有两个不同的实例:cal和cal1。将其更改为表示我的意思,“同一时刻”。格林尼治标准时间的午夜和格林尼治标准时间前4.30小时所在时区的凌晨4.30是同一时刻,或者至少这是我的理解…@chimanrao您的本地时间相同,而不是同一时刻(请参见偏移前的输入部分)。