Как заставить Ruby анализировать время, как если бы оно было в другом часовом поясе? - PullRequest
41 голосов
/ 24 ноября 2010

Я анализирую что-то вроде этого:

11/23/10 23:29:57

, который не связан с часовым поясом, но я знаю, что он находится в часовом поясе UTC (а я нет).Как я могу заставить Ruby проанализировать это, как если бы он был в часовом поясе UTC?

Ответы [ 4 ]

42 голосов
/ 24 ноября 2010

Вы можете просто добавить имя часового пояса 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
20 голосов
/ 25 июля 2013

Если вы используете рельсы, вы можете использовать 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 все равно будет анализироваться как часовой пояс сервера.

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Примечание: указанный выше формат времени больше не работает, поэтому я перешел на поддерживаемый формат.

4 голосов
/ 31 мая 2018

Если вы используете ActiveSupport [от Rails, например], вы можете сделать это:

ActiveSupport::TimeZone["GMT"].parse("..... date string")
4 голосов
/ 06 августа 2015

Изменение ответа @Pete Brumm без Time.zone установлено / не установлено

Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...