【发布时间】:2016-04-12 20:50:54
【问题描述】:
我遇到了一个令人沮丧的问题,我似乎无法缩小范围。我搜索了许多类似的文章,但它们离我的问题还不够近,无法解决。我正在尝试从数据库中提取时间并将其显示在多个时区中。我的 Rails 应用程序默认使用 UTC。这是我正在做的事情:
在创建操作时,我将时间字符串保存在我的数据库的时间列中:
params[:schedule][:start] = "09:00"
Time.zone = "Central Time (US & Canada)"
@schedule.start = Time.zone.parse(params[:schedule][:start])
上面的时间格式应该是这样的:
2016-04-12 09:00:00 -0500
这在数据库中保存为:
2000-01-01 14:00:00
这没有时间偏移,这很好,因为我知道它是 UTC。当我去显示时间时会出现问题:
@schedule.start.in_time_zone("Central Time (US & Canada)")
这会返回:
Sat, 01 Jan 2000 08:00:00 CST -06:00
现在,由于这是一个时间列,我不关心日期。我计划将值格式化为仅显示时间。但是,当它当前是 CDT 时,它显示 CST。
我不知道为什么会这样。正如我所说,我没有在 application.rb 或其他任何地方设置时区,我只在创建操作上设置时区,这在移动到新操作时应该没问题。
任何关于澄清这一点的帮助都会很棒!
这似乎是因为在存储时间时,它与 2000-01-01 年的日期一起存储,这似乎是它使用 CST 的原因。如何在将日期转换为特定时区时忽略日期,还是需要将列类型更改为 DateTime 才能使其正常工作?
【问题讨论】:
-
遇到同样的问题。本质上,
in_time_zone考虑了提供的DateTime的日期以及该时区在提供的DateTime的日期和时间是否处于夏令时。这非常令人困惑。因为我目前不在夏令时,所以我想在我当前的时区(或偏移量)中查看此信息,而不是在相关DateTime的时区(或偏移量)中查看。
标签: ruby-on-rails ruby-on-rails-4