ruby-on-rails - Rails 4 - in_time_zone 意外行为

标签 ruby-on-rails ruby ruby-on-rails-4 timezone utc

我正在使用 Rails 4 尝试使用 in_time_zone 助手,但无法理解这种奇怪的行为。

在本地主机(或从控制台)将我的时间戳转换为 UTC 时,一切都按预期工作:

"2016-12-05 10:00 pm".to_time.in_time_zone("UTC)
=> 2016-12-06 05:00:00 UTC # this is the correct utc time

但是,在我的生产网站上,它返回的时间不正确。

"2016-12-05 10:00 pm".to_time.in_time_zone("UTC)
=> 2016-12-05 22:00:00 UTC # this is incorrect 

不确定这是怎么可能的。无论如何,UTC 应该是 UTC。任何有助于理解为什么会发生这种情况的帮助都会很棒。

最佳答案

您需要告诉软件您要转换的时区是,而不仅仅是。由于您不这样做,它假定它应该从系统时间转换为 UTC。碰巧的是,您的生产服务器上的系统时钟似乎已经采用 UTC,因此它根本不会更改时间。

因为你似乎是在 UTC-7,我猜你在美国西海岸,所以你可以使用这样的代码:

ActiveSupport::TimeZone['America/Los_Angeles'].parse("2016-12-05 10:00 pm").utc

关于ruby-on-rails - Rails 4 - in_time_zone 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40985509/

相关文章:

ruby - 检测 eventmachine 断开连接并测试重新连接

ruby-on-rails - 如何重用命名范围?

ruby-on-rails - Rails 3.1 - 跨服务器共享预编译资源

ruby-on-rails - RubyGems 安装错误的代码

ruby-on-rails - Ruby on Rails 中的手工装饰器。当 Drapper 造成的问题多于解决的问题时

ruby - 将 https 用于 ruby​​gems 时出现 SSL 连接问题

ruby-on-rails - NoMethodError 在 Rails 中构建一个简单的 CMS

ruby-on-rails - Ruby sort_by 哈希数组

ruby-on-rails - 将嵌套模型的验证错误返回为 Rails 中的 json 的更好方法?

ruby-on-rails - 我想创建一个只做一个 Action 但不重定向到指定路径的按钮