我有一个整数,以毫秒精度表示一个unix纪元时间和一个时区字符串。我需要用它们创建一个TimeWithZone对象。
epoch_ms_integer = 1586653140000
time_zone = "America/Los_Angeles"
试图转换为:
Sat, 11 Apr 2020 20:59:00 PDT -07:00
我能够通过执行以下操作来完成此操作:Time.at(epoch_ms_integer/1000).asctime.in_time_zone("America/Los_Angeles")
但想知道这是否是实现此目标的最佳方法。我正在处理的应用程序配置为EST / EDT时区,因此Time.at(epoch_ms_integer/1000)
返回2020-04-11 20:59:00 -0400
。
我能够在这里的答案之一中找到asctime解决方案Ruby / Rails - Change the timezone of a Time, without changing the value
这里提出了相同的问题,但没有答案converting epoch time with milliseconds to datetime。
假设时间戳以毫秒为单位,则1586653140000为
Epoch: 1586653140
GMT: Sunday, April 12, 2020 12:59:00 AM
PDT: Saturday, April 11, 2020 17:59:00 PM -in time zone America/Los Angeles
这些只是引用世界上特定时间点的3种不同方式。星期六,2020年4月11日20:59:00 PDT -07:00和2020-04-11 20:59:00 -0400分别指的是不同的时间点,与纪元(1586653140)不同
由于Unix纪元(或Unix时间或POSIX时间或Unix时间戳)是自1970年1月1日(UTC / GMT午夜)以来经过的秒数,所以只用1586653140
更改时区而不添加时区的偏移量,因为现在您正在谈论另一个时间点。
要从纪元到您可以做的任何时区正确的“翻译”>
Time.zone = "America/Los_Angeles" Time.zone.at(1586653140) => Sat, 11 Apr 2020 17:59:00 PDT -07:00
在使用Rails时区中的日期时,仅使用考虑到所设置时区的功能很重要:
请勿使用
请使用
还要记住,在Rails应用程序中,我们有三个不同的时区:
[thoughtbot的This帖子清楚地说明了事情。