【问题标题】:How to read a timestamp?如何读取时间戳?
【发布时间】:2018-07-09 14:54:03
【问题描述】:

这是一个非常愚蠢的问题,但我很难理解。

我有一个时间戳:

 2017-02-03T06:16:59.094-08:00

这个时间戳是什么时候的 UTC 时间?是2017-02-03 14:16:59.094 还是2017-02-02 06:16:59.094

换句话说,最后的-08:00 是否意味着这是一个本地时间戳并且时区比UTC 晚8 小时? (2017-02-03 14:16:59.094)

或者它只是意味着时间戳是 UTC,但它记录在比 UTC 晚 8 小时的时区?

【问题讨论】:

    标签: time timestamp


    【解决方案1】:

    如果您想要 UTC 时间,则添加 8 小时。您看到的时间是当地时间。

    这是它的工作原理:

    与 UTC 的时间偏移 与 UTC 的偏移附加到时间 与上面的“Z”相同,形式为 ±[hh]:[mm]、±[hh][mm] 或 ±[hh]。因此,如果所描述的时间比 UTC 早一小时,那么 作为柏林冬季的时间,区域指示符将是 “+01:00”、“+0100”或简单的“+01”。为了表示 UTC 之后的时间 偏移量为负。例如,标准期间的纽约时间 (非夏令时)小时为 UTC-05:00,区域指示符将 然后是“-05:00”、“-0500”或简单的“-05”。其他时间偏移见 UTC 时间偏移列表。为了表示负偏移,ISO 8601 指定使用连字符减号或减号字符。如果 交换字符集是有限的,没有减号 符号字符,则应使用连字符-减号。 ASCII 不 有一个减号,所以它的连字符减号(代码是十进制的 45 或二维十六进制)将被使用。如果字符集有减号 符号,则应使用该字符。 Unicode 有一个减号, 其字符代码为U+2212(2212十六进制); HTML 字符实体调用是 -。

    以下时间均指同一时刻:“18:30Z”, “22:30+04”、“1130-0700”和“15:00-03:30”。航海时区字母 除 Z 外不使用。要计算 UTC 时间,必须 从本地时间减去偏移量,例如对于“15:00−03:30”做 15:00 - (-03:30) 获得 18:30 UTC。

    偏移量为零,除了具有特殊表示 “Z”也可以用数字表示为“+00:00”、“+0000”或“+00”。 但是,不允许用否定的数字表示它 符号,如“-00:00”、“-0000”或“-00”。指示标志用法的部分 (标准 2004 版中的第 3.4.2 节)指出,一个加号 符号必须用于正值或零值,减号用于 负值。与此规则相反,RFC 3339,否则 ISO 8601 的配置文件,允许使用“-00”,具有相同的 表示为“+00”,但内涵不同。[29]

    ISO 8601 允许将连字符 (-) 用作减号 (-) 字符 当字符集受到限制时。[30]相比之下,RFC 3339 明确要求连字符 (-) 符号表示否定 偏移并且不允许使用减号 (−) 符号。[31]

    https://en.wikipedia.org/wiki/ISO_8601

    【讨论】:

      【解决方案2】:

      那个时间戳有一个时区偏移量,它告诉你它是什么时间UTC偏移量。没有偏移,它变成2017-02-03T14:16:59.094-00:00

      换句话说,最后的 -08:00 是否意味着这是一个本地时间戳,并且时区比 UTC 晚 8 小时? (2017-02-03 14:16:59.094)

      或者它只是意味着时间戳是 UTC,但它记录在比 UTC 晚 8 小时的时区?

      在某种程度上,两者兼而有之。我认为对UTC时间戳的构成存在误解。每个 UTC 时间戳都带有与 "zulu" 时间的偏移量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 2019-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多