У меня есть это приложение для рельсов, которое должно фиксировать дату и часовой пояс в одной из форм, например: Часовой пояс: 'Гонконг' как строка Дата: '31/12/2013 23:59 'как строкаМанипулирование TimeWithZone в Rails
Часовой пояс по умолчанию для приложения установлен в «Мельбурн», приложение в настоящее время принимает дату и автоматически конвертирует в «2013-12-31 23:59:00 +1100 ', что +1100 является смещением часового пояса Мельбурна с летним временем.
Я хочу, чтобы приложение к:
1) Возьми '31/12/2013 23:59:00' как время выбранного часового пояса, то есть Гонконг
2) Преобразование времени Гонконга в Мельбурн время, т.е. '31/12/2013 23:59:00 +0800 'до '01/01/2014 02:59 +1100', и сохраняются в базе данных.
3) Во время преобразования в пункте 2) необходимо обеспечить уход за летним днем.
Я написал следующий код, который будет делать именно то, что я хочу, чтобы он ТОЛЬКО работал в контроллере. Тем не менее, она не работает, когда я двигаю его к модели с before_create фильтром
time_zone = ActiveSupport::TimeZone.new(params[:time_zone])
date_time = DateTime.strptime(params[:date_time], '%d/%m/%Y %H:%M')
new_date_time = date_time.change(offset: time_zone.formatted_offset(false))
melbourne_date_time = new_date_time.in_time_zone(Time.zone)
Причина, по которой не работает в модели является то, что в контроллере, я вручную разобрать строку даты времени до даты времени. Но в модели рельсы автоматически преобразуют временную строку даты в объект TimeWithZone ... поэтому не могут реально изменить объект ...
Я сделал справедливое немного поиска и по-прежнему не могу разобраться точное решение.
Любая помощь будет оценена!
P.S. Приложение находится на Rails 3.2.12. Я планирую запустить преобразование в рамках метода, связанного с фильтром before_create модели.
Приветствия
Как выглядит ваша модель? Что происходит, когда вы его используете? Вы не сможете получить доступ к «параметрам» контроллера непосредственно из модели. – Ari
Ари, я понимаю, я не смогу получить доступ к параметрам из модели. Код выше - это прямая копия моего решения по шипу, которое я сделал в контроллере.В модели time_zone и date_time являются атрибутами моей модели, мне не нужно было извлекать ее из параметров. Проблема, с которой я столкнулась, - манипулировать объектом TimeWithZone. Мне нужно настроить часовой пояс TimwWithZone (date_time) на временной диапазон выбора пользователя, а затем использовать метод in_time_zone для преобразования в Melbourne time. – user3085562