Задать вопрос
@rd-r

Работа с временными зонами в Ruby on Rails?

Заранее благодарен всем кто ответит.
У меня следующая ситуация. Клиентская сторона отправляет EXIF данные фотографии на сервер. Причем любая дата ( originalDateTime, dateTime или digitizedDateTime) отправляется в формате rfc3339 с обнуленным смещением (например:2017-20-10T12:50:30+00:00, почему именно так а не иначе, другой вопрос. Изменить сейчас я это не смогу). На серверной стороне происходит ПРИМЕРНО следующее. Вычисляем timeZone на основе координат, создаем объект даты-времени с нужным смещением, затем приводим эту дату к определенному по умолчанию на сервере часовому поясу (Central Daylight Time) и сохраняем потом в БД. Я не могу изменить сейчас то, в каком формате мы получаем дату, и в каком сохраняем в БД. Далее из БД, эта дата вынимается, конвертируется снова в формат rfc3339, и отправляет клиентской стороне.
Я думаю, здесь точно есть какая-то ошибка, с конвертированием даты и времени, которую я сейчас не могу увидеть.
Вопрос: Есть ли во всех этих действиях что-то вообще валидное?

if picture[:picture_timestamp]

                if picture[:latitude] && picture[:longitude]

                  parsed_date_time = DateTime.rfc3339(picture[:picture_timestamp]).to_s(:db)
                  timezone = Timezone.lookup(picture[:latitude], picture[:longitude])
                  date_obj = ActiveSupport::TimeZone[timezone.name].parse(parsed_date_time)

                  date_with_offset = DateTime.new(date_obj.year, date_obj.month, date_obj.day, date_obj.hour, date_obj.min, date_obj.sec, date_obj.zone).to_s

                  @dailypost.picture_timestamp = Time.zone.parse(date_with_offset)
                end
 end
  • Вопрос задан
  • 175 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Причем любая дата ( originalDateTime, dateTime или digitizedDateTime) отправляется в формате rfc3339 с обнуленным смещением
Потому что UTC.
Смещение временной зоны можно вычислить по местонахождению при помощи гема timezone.
Соответственно, в БД нужно для каждого изображения хранить время в колонке datetime, а не varchar , чтобы избегать лишних парсинга и форматирования дат.
Если клиенту нужно отдать время в формате rfc3339, то форматировать непосредственно при формировании ответа HTTP.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
OTKLIK POWER Москва
от 80 000 до 150 000 ₽
Netwrk Буэнос-Айрес
от 5 000 до 7 500 $
от 6 000 до 8 000 $