Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Time ISO-8601 UTC和Unix时间戳之间是否存在一对一和ON关系? 时间格式_Time_Unix Timestamp_Iso8601 - Fatal编程技术网

Time ISO-8601 UTC和Unix时间戳之间是否存在一对一和ON关系? 时间格式

Time ISO-8601 UTC和Unix时间戳之间是否存在一对一和ON关系? 时间格式,time,unix-timestamp,iso8601,Time,Unix Timestamp,Iso8601,时间点通常表示为或人类可读的时间字符串 例如: Unix时间 自历元起的秒数,或Unix时间戳,以秒或毫秒为单位: 1529325705 1529325705000 ISO 8601日期 2018-06-18T15:41:45+00:00 我的问题 两者之间是否存在一对一的关系?换句话说,是否存在一个时间点,在一种格式中有一个表示,而在另一种格式中有多个表示,或零个表示 换句话说,是否存在一个时间点,在一种格式中有一个表示,而在另一种格式中有多个表示,或零个表示 不。UTC时间取决于您的地理位置

时间点通常表示为或人类可读的时间字符串

例如:

Unix时间 自历元起的秒数,或Unix时间戳,以秒或毫秒为单位:

1529325705

1529325705000

ISO 8601日期 2018-06-18T15:41:45+00:00

我的问题 两者之间是否存在一对一的关系?换句话说,是否存在一个时间点,在一种格式中有一个表示,而在另一种格式中有多个表示,或零个表示

换句话说,是否存在一个时间点,在一种格式中有一个表示,而在另一种格式中有多个表示,或零个表示

不。UTC时间取决于您的地理位置,即您的纬度和经度。但是,UNIX时间戳是一种将时间作为运行总秒数进行跟踪的方法。此计数从1970年1月1日UTC的Unix纪元开始。 从

还应该指出,这一时间点在技术上并没有改变 不管你在地球上的位置


是的,有可能找到这样一个日期。在Unix时代的wiki文章中:

每天被视为正好包含86400秒[2],因此闰秒不适用于自新纪元以来的秒

这意味着闰秒本身不能在Unix时间中表示

例如,最近的闰秒发生在2016年底,因此
2016-12-31T23:59:60+00:00
是有效的ISO 8601时间戳。但是,前一个23:59:59的Unix时间戳表示为1483228799,后一个00:00:00(2017年1月1日)的Unix时间戳表示为1483228800,因此没有表示闰秒的Unix时间戳

实际上,这对你来说可能不是问题;自1972年推出以来,只有27闰秒



值得一提的是,ISO 8601的大多数软件实现也不考虑闰秒,但如果要求解析
“2016-12-31T23:59:60+00:00”
,则会做其他事情。NET中的
System.DateTime
类抛出一个异常,同时也可以想象库将返回2017-01-01 00:00:00。

否。两者之间有很好的对应关系,但关系是1对多,严格来说,对于给定的ISO日期时间字符串,甚至可能不存在精确的Unix毫秒。有些问题是:

  • ISO 8601格式中有一些自由度,因此即使我们要求时间以UTC为单位(偏移量为零),也可以用几种方式写入相同的Unix毫秒。
    • 秒和秒的分数是可选的,秒上可能有不同数量的小数。因此,例如,可以编写1529381160000毫秒值,作为示例
      • 2018-06-19T04:06:00.000000000Z
      • 2018-06-19T04:06:00.00Z
      • 2018-06-19T04:06:00Z
      • 2018-06-19T04:06Z
    • 0的偏移量通常写为
      Z
      ,但也可以像您在问题
      +00:00
      中那样写。我认为表格
      +00
      +0000
      也可以(带负号的表格不行)
  • 由于ISO 8601中的秒数可能超过三个小数,因此没有精确的Unix毫秒可以匹配。因此,您必须接受截断(或舍入)才能转换为Unix时间。当然,如果将其转换为Unix秒而不是毫秒,错误将更大
  • 正如Thomas Lycken所指出的,闰秒可以用ISO 8601表示,但不能用Unix时间表示

  • 对例如,unix时间戳
    0
    。例如,它可以在ISO 8601中表示为
    1970-01-01T00:00:00+00:00
    1970-01-01T01:00:00-01:00
    。但也许你说的是ISO 8601,特别是在UTC时区(该标准本身没有保证)?补充说明-我指的是UTC,这实际上是不正确的;看看我的答案。然而,自1972年以来,只有27秒是不正确的,因此该声明的“正常运行时间”比大多数云提供商要好;)@汤姆斯莱肯,谢谢。我从未考虑过闰秒。ISO 8601也可以使用UTC的偏移量表示某个时区中的时间,这是正确的,例如2018-06-16T06:28:34.765+02:00。但是这个问题明确地问到UTC时间,所以偏移量总是零。