Лучший способ сохранить дату и время через API в рельсах - PullRequest
0 голосов
/ 13 января 2010

У меня есть требование сохранить атрибут datetime (visit_at) через API, как POST localhost:3000/visit, но проблема в том, что я не знаю, как обрабатывать часовой пояс. Я вижу объяснение о поддержке часовых поясов здесь , но это при создании через форму рельсов. Что я хочу знать, если есть способ справиться с этим через мой API.

1 Ответ

2 голосов
/ 13 января 2010

Есть 3 связанных вопроса:

  1. Парсинг входящего времени (в вашем API)
  2. Время хранения в вашей базе данных
  3. Отображение времени для ваших пользователей

Ваш вопрос в основном касается (1), но (2) и (3) также важны.

Для (2) я бы нормализовал все по UTC, чтобы переход на летнее время и т. Д. Не влиял на вас. В config / environment.rb я бы установил ENV['TZ'] = 'utc' только для безопасной игры.

Для (3), если вы хотите отобразить время для пользователя в его местном часовом поясе, вам придется сохранить его в своей модели пользователя, а затем отформатировать время соответствующим образом.

Теперь для (1) вы сможете проанализировать входящее время (например, с помощью Time.parse), после чего оно будет нормализовано в UTC. Time.parse может обрабатывать различные способы описания часового пояса. (Я хотел бы указать ваш API, чтобы указать, что если часовой пояс не указан, предполагается UTC).

1020 * Е.Г. *

>> ENV['TZ']
=> "utc"
>> Time.now.to_s
=> "Wed Jan 13 16:43:00 +0000 2010"
>> Time.parse( "Wed Jan 13 16:43:00 +0500 2010" )
=> Wed Jan 13 11:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 -0500 2010" )
=> Wed Jan 13 21:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 EST 2010" )
=> Wed Jan 13 21:43:00 +0000 2010
>> Time.parse( "Wed Jan 13 16:43:00 CST 2010" )
=> Wed Jan 13 22:43:00 +0000 2010
>> t1 =  "Wed Jan 13 16:43:00 CST 2010"
=> "Wed Jan 13 16:43:00 CST 2010"
>> t2 =  "Wed Jan 13 17:43:00 EST 2010"
=> "Wed Jan 13 17:43:00 EST 2010"
>> Time.parse(t1) == Time.parse(t2)
=> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...