【问题标题】:understanding XMLGregorianCalendar/GregorianCalendar time in milliseconds了解 XMLGregorianCalendar/GregorianCalendar 时间(以毫秒为单位)
【发布时间】:2014-05-22 19:56:20
【问题描述】:

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

考虑下面的代码 sn-p

        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 小时,即第二个时间字符串中的时区偏移量。

不知道我的理解哪里出了问题。

【问题讨论】:

  • 输入时间怎么一样?我错过了什么?
  • 您的“它们指的是同一个实例”的说法令人困惑,因为您有两个不同的实例:cal 和 cal1。
  • 将其更改为表示我的意思,“同一时刻”。格林威治标准时间的午夜和比格林威治标准时间提前 4.30 小时的时区凌晨 4.30 是同一时刻,或者至少这是我的理解......
  • @chimanrao 您有相同的当地时间,而不是相同的瞬间(请参阅偏移前的输入部分)。

标签: java xml utc timezone-offset


【解决方案1】:

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

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

最后,在本地时间相同但偏移量不同的情况下,您会得到不同的 UTC 时间!一般公式为:

UTC + offset = (local time)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多