从整数(具有毫秒精度的Unix历元时间)并具有指定的区域(字符串)创建TimeWithZone对象

问题描述 投票:0回答:1

我有一个整数,以毫秒精度表示一个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

ruby-on-rails ruby datetime timezone epoch
1个回答
0
投票

假设时间戳以毫秒为单位,则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时区中的日期时,仅使用考虑到所设置时区的功能很重要:

请勿使用

  • Time.now
  • 今天的日期
  • Date.today.to_time
  • Time.parse(“ 2015-07-04 17:05:37”)
  • Time.strptime(string,“%Y-%m-%dT%H:%M:%S%z”]
  • 请使用

    • 当前时间
  • 2.hours.ago
  • 今天的时区
  • 当前日期
  • 1.day.from_now
  • Time.zone.parse(“ 2015-07-04 17:05:37”)
  • Time.strptime(string,“%Y-%m-%dT%H:%M:%S%z”)。in_time_zone
  • 还要记住,在Rails应用程序中,我们有三个不同的时区:

    • 系统时间,
  • 申请时间和
  • 数据库时间。
  • [thoughtbot的This帖子清楚地说明了事情。

© www.soinside.com 2019 - 2024. All rights reserved.