Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以毫秒为单位理解XMLGregorianCalendar/GregorianCalendar时间_Java_Xml_Utc_Timezone Offset - Fatal编程技术网

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

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

我试图理解Java中
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您的本地时间相同,而不是同一时刻(请参见偏移前的输入部分)。