【发布时间】:2019-09-09 03:25:16
【问题描述】:
我正在尝试将 Rails 日期时间转换为毫秒,但当我调用 .strftime 或 .to_i 时,它会忽略分配给它的时区并读取系统的时区
system timezone: Europe/London # currently is +01:00 due to BST
# application.rb
config.time_zone = 'Europe/Athens' # +03:00
stored in database as GMT: 2019-04-19 10:00:00.000000
start_date: schedule.start_date,
to_datetime: schedule.start_date.to_datetime,
strftime: schedule.start_date.to_datetime.strftime('%Q').to_i,
start_date: "2019-04-19T13:00:00.000+03:00",
to_datetime: "2019-04-19T13:00:00.000+03:00",
strftime: 1555668000000, # 2019-04-19T11:00:00.000+01:00
它在视图中正确呈现
<%= schedule.start_date %>
# 13:00:00 19 Apr 2019
irb(main):004:0> Time.at(1555668000)
=> 2019-04-19 11:00:00 +0100
如果之前已经回答过这个问题,我深表歉意,但我找不到令人满意的解决方案。
【问题讨论】:
-
为什么你认为
1555668000等于2019-04-19T13:00:00.000+01:00?你错了。1555668000等于GMT: 2019-04-19 10:00在您的情况下是正确和预期的。 -
时间戳的定义是自协调世界时 (UTC) 1970 年 1 月 1 日星期四 00:00:00 以来经过的秒数。
-
您可以使用 Ruby 方法
Time.at(1555668000)或通过关键字convert unix to utc在互联网上找到的任何在线服务来确保您得到的结果是正确的 -
我想将日期时间转换为毫秒加上时区偏移量
-
根据
1555668000,如果我使用Time.at(1555668000),我会得到2019-04-19 17:00:00 +0700,这是我当地时区(曼谷)的时间,这就是为什么你会得到2019-04-19 11:00:00 +0100的原因当地时区。如果您的预期结果是2019-04-19 13:00:00 +0300,您可以使用Time.zone.at(1555668000).to_time
标签: ruby-on-rails ruby datetime timezone