我确信我在这里有一些转换的东西。
在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的时区。为什么?正如您所看到的,这就是弄乱日期特定的项目。
答案 0 :(得分:0)
如果您希望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