2015-07-09 4 views
0

У меня есть запрос с Params:Почему рельсы Преобразование строк в DateTime игнорирует часовой пояс?

...&from_date=2015-07-09T11:28:06.763+02:00 

В контроллере при использовании params[:from_date] возвращает DateTime объекта:

Thu, 09 Jul 2015 11:28:06 +0000 

это является время UTC, но оригинальный часовой пояс (+02: 00) не принимается во внимание при конвертации. Кроме того, часовой пояс приложения установлен на часовой пояс «Варшава» (+2: 00).

Как я могу сделать рельсы распознавать часовой пояс в params[:from_date]?

EDIT.

Я изменил тип параметра:

optional :from_date, type: DateTime, desc: "From date" 

к опционально: FROM_DATE, Тип: String, убывание: "С даты"

И обнаружили, что рельсы новообращенных '+' в пространстве, так что я получить "2015-07-09T11: 28: 06.763 02:00". Таким образом, проблема найдена.

+0

Когда я попробовать это я получаю: ' "2015-07-09T11: 28: 06,763 + 02: 00" .to_datetime # => чт, 9 июля 2015 11: 28:06 + 0200'. Как вы используете параметр params [: from_date'? – pdobb

+0

Да, я уверен. Я получаю хорошее время, просто игнорируя часовой пояс. Это не обычный контроллер, а метод виноградного апи. – user1167937

+0

Я использую binding.pry в начале метода, а затем просто поставлю команду «params [: from_date]» в консоли. Затем я получаю точное время и дату, как в параметре, но часовой пояс +0000, поэтому он существенно отличается от входного параметра. – user1167937

ответ

0

использовать этот код:

params[:from_date].to_datetime.in_time_zone('Warsaw') 
+0

params [: from_date] уже имеет класс DateTime. Кроме того, он имеет неправильное значение - не учитывает часовой пояс в параметре запроса. Метод 'in_time_zone («Варшава») просто преобразует это неправильное значение в другой часовой пояс – user1167937

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