【问题标题】:ISO 8601 Datetime understandingISO 8601 日期时间理解
【发布时间】:2018-08-18 07:29:56
【问题描述】:

我正在尝试了解 ISO 8601 格式的日期读取,但找不到要阅读的好文档。

如果我在代码中获得时间,例如“2018-08-18T00:00:00+1000”,这是当地时间还是 UTC 时间? 当我使用 Convert.ToDateTime("2018-08-18T00:00:00+1000") 转换它时,我得到以下日期时间 {8/17/2018 7:00:00 AM}。我不确定那是 UTC 日期时间还是本地时间?

“2018-08-18T00:00:00+1000”转换为 {8/17/2018 7:00:00 AM} 背后的数学原理是什么,我无法理解。

【问题讨论】:

  • +1000 最后表示 UTC + 10 小时 0 分钟。你应该看看wikipedia写的关于ISO 8601的内容。关于转换我不知道,也许是c#?我相信这样的问题已经回答过很多次了。
  • 感谢 Joakim,我在阅读了 wiki 的页面后提出了这个问题,它并没有太大帮助。正如我所了解的那样,UTC +10 小时,但这是否意味着该日期是当地时间或 UTC?另外,是的,那是 c# 代码,当代码运行时,+10 特别没有意义,它会将时间推迟几个小时......从 2018 年 8 月 18 日到 2018 年 8 月 17 日上午 7 点,显然不是 +10区别..
  • +1000 表示它在时区 UTC + 10 小时内,如果您不在该时区,则在转换和使用本地时间时会得到不同的时间值。这是一个棘手的领域,很容易出错,这取决于您想对日期做什么,最简单的方法可能是先将其转换为 UTC,然后再转换为您的本地时区。无论如何,如果您需要更多关于实际转换的帮助,您应该使用c# 标记这个问题。

标签: datetime iso8601


【解决方案1】:

您要求2018-08-18T00:00:00+1000 背后的数学运算显示为8/17/2018 7:00:00 AM

首先8/17/2018 7:00:00 AM 只是另一种显示日期和时间的格式。转换为 ISO 8601 字符串后将如下所示:2018-08-17T07:00:00

+10002018-08-18T00:00:00+1000 表示的末尾是一个时区偏移量。您可以将该字符串读取为 UTC 时间 2018 年 8 月 18 日加十小时。所以它与2018-08-18T10:00:00Z 相同。

因此,我们的 UTC 日期为 2018 年 8 月 18 日上午 10 点,显示为 2018 年 8 月 17 日上午 7 点的区域设置日期。这意味着您所在的时区比 UTC 晚 27 小时。

在 UTC 之前(或之后 14 小时)不存在时区(据我所知)。因此,我假设您的示例中有错字。另一个原因可能是日期解析器完全损坏。

但我仍然希望您了解转换背后的数学原理。

【讨论】:

  • 非常感谢 Jelhan 在这方面的帮助。是的,我明白这一点,这正是我感到困惑的原因,它怎么能回到 27 小时前???没有这样的时区,但代码仍然不断地返回给我。我能想到的唯一原因是,它在内部做一些没有意义的数学运算。是否有可能将 18 年 8 月 18 日作为当地时间,然后进行一些转换。但这正是 c# 代码返回的内容,我无法理解它。
猜你喜欢
  • 1970-01-01
  • 2010-10-23
  • 2022-01-18
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多