Установить часовой пояс для входящих данных XML - PullRequest
2 голосов
/ 23 февраля 2011

Я получаю поле даты и времени от API, который явно не устанавливает его часовой пояс. Когда я помещаю это в базу данных, предполагается, что дата и время должны быть в GMT, но часовой пояс фактически соответствует чикагскому времени. (Я говорю «Чикагское время», потому что я все еще не уверен, что этот API учитывает DST.) Как мне лучше преобразовать это время в GMT перед добавлением его в базу данных?

Вот пример XML одного из узлов, на которые я ссылаюсь:

<FromDateTime>2011-03-17 08:00:00</FromDateTime>

В Ruby я использую это для добавления этой записи в базу данных.

:starttime => DateTime.parse(row.at_xpath("FromDateTime/text()").to_s),

Я думаю, что мне нужно добавить разницу в часах между CST и GMT к последнему вызову Ruby, верно? Как бы я это сделал?

Спасибо!

1 Ответ

2 голосов
/ 23 февраля 2011

Не могли бы вы использовать вместо этого время? DateTime не осведомлен о летнем времени. Время автоматически устанавливает местное смещение по Гринвичу для данной даты / времени и устанавливает летнее время, если это необходимо.

irb(main):014:0> require 'time'
irb(main):015:0> Time.parse('2011-03-17 08:00:00')
=> Thu Mar 17 08:00:00 -0400 2011
irb(main):022:0> Time.parse('2011-03-17 08:00:00').dst?
=> true

Вот случай для стандартного времени (я в EST)

irb(main):025:0> Time.parse('2011-01-17 08:00:00')
=> Mon Jan 17 08:00:00 -0500 2011
irb(main):023:0> Time.parse('2011-01-17 08:00:00').dst?
=> false

Если вы используете ActiveSupport http://api.rubyonrails.org/classes/DateTime.html, вы можете установить произвольный часовой пояс:

irb(main):039:0> Time.zone = 'America/Chicago'
=> "America/Chicago"
irb(main):040:0> Time.parse('2011-03-17 08:00:00')
=> Thu Mar 17 08:00:00 -0400 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...