Есть 3 связанных вопроса:
- Парсинг входящего времени (в вашем API)
- Время хранения в вашей базе данных
- Отображение времени для ваших пользователей
Ваш вопрос в основном касается (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