Я пытаюсь преобразовать datetime с полем внешнего часового пояса в UTC. Может кто-нибудь объяснить мне, почему это не работает?

time_str = '2016-03-01 00:00'
zone_str = 'Pacific Time (US & Canada)'

Time.use_zone(zone_str) { Time.parse(time_str).in_time_zone('UTC') }

Чего я жду:

'2016-03-01 08:00'

Что я получаю:

'2016-03-01 06:00'

По сути, он игнорирует мой вызов use_zone и использует только мой местный часовой пояс, который является Центральным.

Что я должен делать вместо этого?

-- редактировать --

Обратите внимание, что я НЕ пытаюсь установить часовой пояс для всего приложения. Я ТОЛЬКО пытаюсь взять один набор входных данных (время и часовой пояс в отдельных полях формы) и преобразовать их в UTC.

1
kid_drew 18 Фев 2016 в 16:07

3 ответа

Лучший ответ

Попробуйте это решение:

 time = ActiveSupport::TimeZone.new(zone_str).parse(time_str)
 time.in_time_zone('UTC')
 #=> Tue, 01 Mar 2016 08:00:00 UTC +00:00
3
Ilya 18 Фев 2016 в 13:17

Попробуй это:

time_str = '2016-03-01 00:00'
zone_str = 'Pacific Time (US & Canada)'
Time.zone = zone_str
Time.zone.parse(time_str).in_time_zone("UTC")
0
MayankJ 18 Фев 2016 в 13:26
time_str = '2016-03-01 00:00'
zone_str = 'Pacific Time (US & Canada)'
time = ActiveSupport::TimeZone.new(zone_str).parse(time_str)
time.in_time_zone('UTC')

Используйте этот код выше.

1
Uday kumar das 18 Фев 2016 в 13:33