Конвертировать строку DateTime в UTC в рельсах - PullRequest
35 голосов
/ 28 октября 2010

У меня есть такая строка:

"2010-01-01 12:30:00"

Мне нужно конвертировать в UTC из текущего местного часового пояса.

Я пробовал это, но кажется, что строка уже UTC.

"2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)")
=> Fri, 01 Jan 2010 06:30:00 CST -06:00

Я не уверен, куда идти отсюда.

добавил это из моего комментария:

>> Time.zone = "Pacific Time (US & Canada)"
=> "Pacific Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010
>> Time.zone = "Mountain Time (US & Canada)"
=> "Mountain Time (US & Canada)"
>> Time.parse("2010-10-27 00:00:00").getutc
=> Wed Oct 27 06:00:00 UTC 2010

Спасибо за любую помощь.

Ответы [ 3 ]

53 голосов
/ 28 октября 2010
Time.parse("2010-01-01 12:30:00").getutc

РЕДАКТИРОВАТЬ

(скрежетать зубами, думая о кошмаре, связанном с обработкой даты / времени в Ruby / Rails)

ОК, как насчет этого1008 *

Time.zone.parse("2010-01-01 12:30:00").utc

Обратите внимание, что Time.zone.parse возвращает DateTime, а добавление .utc дает Time.Есть различия, так что будьте осторожны.

Кроме того, Time.zone является частью Rails (ActiveSupport), а не Ruby.Просто чтобы ты знал.

10 голосов
/ 20 сентября 2016

В Рельсы 4 и выше Вы можете напрямую использовать in_time_zone

"2010-01-01 12:30:00".in_time_zone
#=> Fri, 01 Jan 2010 12:30:00 EST -05:00

"2010-01-01 12:30:00".in_time_zone.utc
#=> 2010-01-01 17:30:00 UTC
9 голосов
/ 07 апреля 2014

Для API вы можете использовать:

utc_date = Time.parse("2013-05-31 00:00").utc.iso8601 #=> Result will be: 2013-05-30T21:00:00Z

Вы можете проверить эти статьи:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...