Ruby - 解析时间戳,就像它在特定时区一样

时间:2017-04-13 22:08:33

标签: ruby timezone mixpanel

我从Mixpanel导出一些数据并尝试读取时间戳。但是,Mixpanel会以UTC以外的其他方式发送时间戳。

Mixpanel文档

  

时间戳以1970年1月1日以来的秒数表示在项目的时区,而不是UTC作为真正的纪元时间戳。例如,如果您的项目设置为太平洋时间,则为需要将8小时(或7小时,如果没有在白天节省时间)(60分钟* 60秒* 8小时)添加到时间戳,以便将此时间戳转换为UTC。这意味着使用许多历元转换器转换原始导出时间戳将导致表示具有不正确偏移的时间。

实施例

1492100624是mixpanel的时间戳,它对应04/13/2017 @ 4:23pm (Central Time US)。如果我使用Time.at来解析时间戳,则假设时间戳是UTC格式。

irb(main):001:0> Time.at 1492100624
=> 2017-04-13 11:23:44 -0500
irb(main):002:0> Time.at(1492100624).utc
=> 2017-04-13 16:23:44 UTC .   # correct time in the wrong timezone

根据他们的文档手动添加7或8小时似乎容易出错,具体取决于时间戳是否在夏令时之前或之后。然后,时区令人困惑,所以我可能会比看起来更难!

我应该如何正确阅读这些时间戳,以便我可以在UTC中对它们进行操作?

注意:我没有使用rails。我怎样才能在vanilla Ruby中做到这一点?

1 个答案:

答案 0 :(得分:1)

这个解决方案似乎对我有用:

t = Time.at 1492100624 // => 2017-04-13 11:23:44 -0500
t -= t.utc_offset      // => 2017-04-13 16:23:44 -0500