Как заставить Ruby анализировать время, как если бы оно находилось в другом часовом поясе?
Я разбираю что-то вроде этого:
11/23/10 23:29:57
у которого нет связанного с ним часового пояса, но я знаю его в часовом поясе UTC (пока я не знаю). Как я могу заставить Ruby проанализировать это, как если бы он находился в часовом поясе UTC?
Ответ 1
Вы можете просто добавить имя часового пояса UTC в строку перед ее разбором:
require 'time'
s = "11/23/10 23:29:57"
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010
s += " UTC"
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010
Ответ 2
Если вы используете рельсы, вы можете использовать помощники ActiveSupport::TimeZone
current_timezone = Time.zone
Time.zone = "UTC"
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00
Time.zone = current_timezone
Он предназначен для установки часового пояса в начале запроса на основе пользовательского часового пояса.
Все должно иметь Time.zone на нем, поэтому Time.parse все равно будет анализироваться как часовой пояс серверов.