【问题标题】:Time.new subtracting 6 hours AND tacking on CST -6 on Heroku?Time.new 减去 6 小时并在 Heroku 上添加 CST -6?
【发布时间】:2014-02-06 21:15:21
【问题描述】:

我确定我正在查看一些转换的东西。

在 Heroku 的控制台上,

irb(main):052:0> Time.new(2014, 1, 21)
=> 2014-01-21 00:00:00 +0000

但是,为此设置一列:

irb(main):042:0> PressRelease.first.update_attribute :published_on, Time.new(2014, 1, 21)
  PressRelease Load (1.9ms)  SELECT "press_releases".* FROM "press_releases" ORDER BY created_at DESC LIMIT 1
   (1.0ms)  BEGIN
  FriendlyId::Slug Load (0.8ms)  SELECT "friendly_id_slugs".* FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."sluggable_id" = 1 AND "friendly_id_slugs"."sluggable_type" = 'PressRelease' ORDER BY "friendly_id_slugs".id DESC LIMIT 1
   (0.6ms)  COMMIT
=> true

给出这个日期:

=> Mon, 20 Jan 2014 18:00:00 CST -06:00

澄清一下,application.rb 确实设置了时区:

config.time_zone = 'Central Time (US & Canada)'

当我查看他们的控制台时:

irb(main):054:0> Time.zone
=> (GMT-06:00) Central Time (US & Canada)

但是,在本地执行此操作可以正常工作:

1.9.3-p448 :011 > Time.new(2014, 1, 21)
 => 2014-01-21 00:00:00 -0600 

因此,看起来 Heroku 正在减去 -6(因为我们的时区设置为 CST -6),然后也添加了 CST -6 的时区。为什么?如您所见,这会弄乱特定日期的项目。

【问题讨论】:

    标签: ruby-on-rails date heroku time


    【解决方案1】:

    如果你想让 Rails 使用time_zone 设置,你需要使用ActiveSupport::TimeZone 提供的包装器。参见文档:http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

    这是一个例子:

    Time.zone.parse("2014-1-21")
    # Outputs Tue, 21 Jan 2014 00:00:00 MST -07:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2018-11-22
      相关资源
      最近更新 更多