2014-02-06 1 views
0

Я уверен, что здесь есть кое-что конвертируемое.Time.new вычитание 6 часов И привязка к CST -6 на Heroku?

На консоли 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

Если вы хотите, чтобы 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 
Смежные вопросы