【发布时间】:2018-11-22 16:08:00
【问题描述】:
据我了解,UTC 意味着在时区 +00:00 中给出时间。但 Ruby 在Time#utc? 中的想法不同。我在 Ruby 2.5.1 中观察到了这一点:
a = Time.new(2018,6,13, 9,0,0, '+00:00')
# => 2018-06-13 09:00:00 +0000
b = Time.utc(2018,6,13, 9,0,0)
# => 2018-06-13 09:00:00 UTC
a == b
# => true
a.utc?
# => false (WHY???)
b.utc?
# => true
恕我直言,a.utc? 应该返回 true。有什么解释吗?
补充:来自Ruby docs for Time#utc?
如果 time 表示 UTC (GMT) 时间,则返回 true。
“以 UTC/GMT 表示时间”究竟是什么意思?显然,偏移量 0 是不够的。
【问题讨论】:
-
UTC 是时间标准,而不是时区。 GMT 是偏移量为 +00:00 的时区。虽然它们大部分是等价的,但不应混淆。 UTC 是时区的偏移量。因此,GMT 与 UTC 的偏移量为 +00:00。从这个意义上说,UTC 没有偏移量,因为它是 from 测量的偏移量。
-
@Stefan 它确实...这是 Ruby 在术语上的错误(将 GMT 与 UTC 而不是 +00:00 相关联)。来自文档:“
Time类将 GMT(格林威治标准时间)和 UTC(协调世界时)视为等效的。GMT 是引用这些基线时间的较旧方式,但在 POSIX 系统上的调用名称中仍然存在.”(强调我的)。 -
你也可以这样看:
2018-06-13 09:00:00 +0000是英国的具体时间;2018-06-13 09:00:00 UTC是无处不在的特定时间。 -
@Stefan 一个小小的挑剔 - 我敢肯定你不是有意这种模棱两可的,但是 - 这些特定时区是同时切换的,就像现在所有时区一样欧洲是使用夏令时的国家之一;但是,在世界其他地区并非如此,many countries 对于何时切换有自己的规则。
-
@Amadan 改写评论会导致至少一个错字。当然:这些 ;-)