Ruby 时间戳可靠地转换为 UTC

Ruby Timestamp Reliably Convert To UTC

我正在编写 Ruby 脚本。它需要接受来自用户的时间戳,然后使用它进行一些数据库查询。 据我所知,数据库以 UTC 格式存储时间戳。

我想让用户按以下格式指定时间:2015-01-01 05:00 AM CST

根据 Google 告诉我 CST 比 UTC 晚 6 小时,所以在转换为 UTC 后我预计时间是 2014-12-31 11:00 PM UTC。

但这不是我所看到的。

Time.strptime('2015-01-01 05:00 AM CST', '%Y-%m-%d %I:%M %P %Z').utc

打印

2015-01-01 11:00:00 UTC

它不应该打印 2014-12-31 11:00 PM UTC 吗?

Time.strptime('2015-01-01 05:00 PM CST', '%Y-%m-%d %I:%M %Z').utc

打印

2015-01-01 11:00:00 UTC

从 AM 到 PM 的变化似乎没有任何区别,怎么会这样呢?

我搞反了! UTC 早于 CST,因此当 CST 转换为 UTC 时,CST 时间将增加 6 小时!!

Ruby 做得对。

所以 CST 上午 5 点 = UTC 上午 11 点。 下午 5 点 CST = 晚上 11 点 UTC。

如果我在美国中部标准时间晚上 11 点测试,则会发生天数差异:

Time.strptime('2015-01-01 11:00 PM CST', '%Y-%m-%d %I:%M %P %Z').utc

打印

2015-01-02 05:00:00 UTC

那是正确地增加了一天。