2015-09-07 2 views
0

Я пытаюсь изменить время UTC, которое находится в моей базе данных Postgresql, в восточное время, чтобы отправить отправителя. Я схожу с ума, пытаясь их преобразовать, и просто не может показаться, что это правильно.Преобразование часовой пояс объекта в базе данных

Время было фактически создано (EST): 1:33 вечера вызовов в консоли:

item.created_at => "2015-09-07 17:33:16" 
item.to_time("Eastern Time (US & Canada)") => 2015-09-07 17:33:16 +0000 
item.in_time_zone("Eastern Time (US & Canada)").to_time.strftime("%l:%M%p") => 9:33PM 

Похоже, есть некоторый тип преобразования происходит (переход от 17:33 до 21:33) но это «назад»? Он должен опускаться на 4 часа не до 4 часов.

Любая помощь очень ценится!

Спасибо!

+0

вы должны попробовать этот элемент item.in_time_zone («Восточное время (США и Канада)»). Strftime («% l:% M% p») 'Я думаю,' to_time' преобразует его обратно в 'utc' – Athar

+0

Похоже, что просто отправляет обратно исходное время только отформатировано => 5:33 PM Есть ли способ установить метод to_time в другой часовой пояс, чем utc? –

+0

Какое должно быть ваше ожидаемое время вывода. ? – Athar

ответ

0

Вам нужно только это:

item.created_at.in_time_zone("Eastern Time (US & Canada)") 

Вот надуманный пример:

[2] pry(main)> time = Time.now.utc 
=> 2015-09-07 17:51:17 UTC 
[3] pry(main)> time.in_time_zone("Eastern Time (US & Canada)") 
=> Mon, 07 Sep 2015 13:51:17 EDT -04:00 
+0

Anthony, он работает, если я создаю новый элемент в консоли rails, но не на существующий элемент в базе данных. 'item.created_at => 2015-09-07 17: 33: 16.908491' ' item.created_at.in_timezone («Восточное время (США и Канада)») => 2015-09-07 17:33:16 - 0400' Кажется, он показывает -04: 00, но на самом деле не принимает его с течением времени. –

0

Не уверен, если это то, что вы ищете, но есть возможность в application.rb установить часовой пояс , Просьба проверить

config.time_zone = 'Pacific Time (US & Canada)' 
+0

Спасибо, однако я уже пробовал это. –

0

Прошу прощения, это была моя ошибка.

Поскольку информация, которую я получал, была связана с запросом, мне почему-то пришлось анализировать созданный_at объект DateTime, прежде чем я смог использовать метод in_time_zone.

Таким образом, в конце концов,

DateTime.parse(time).in_time_zone("Eastern Time (US & Canada)")

работал так же, как это должно быть.

Смежные вопросы