2014-01-31 3 views
0

У меня есть поле в моей таблице как «start_time» как строка. Например, значение «2014-02-07T02:00:00Z». Это обеспечивается API. Мы хотим показать это время в соответствии с часовым поясом клиента (май EST, Central, IST, Pacific time). Для тестирования В моей системе я установил часовой пояс (водоприемников Time (США & Канады)) Я попыталсяОт строки до другого часового пояса, не работающего в рубине

start_at = "2014-02-07T02:00:00Z" 
start_time = Time.parse(start_at.chop!) 
gm_start_time = Time.gm(start_time.strftime('%Y'), start_time.strftime('%b'), start_time.strftime('%d').to_i, start_time.strftime('%H'), start_time.strftime('%M'), start_time.strftime('%S')) 
event_start_time = gm_start_time.localtime.strftime('%m/%d/%Y %H:%M') 

Result as: 
2014-02-07 02:00:00 -0500 ==> start_time 
2014-02-06 21:00:00 -0500 ==> gm_start_time 
"02/06/2014 21:00"  ==> event_start_time 

Вот я пытаюсь это

  1. преобразовать строку в объект времени
  2. Преобразование что время по Гринвичу
  3. От GMT пытается найти эквивалент "сумасшедшая ltime"

Если центральное время составляет 2014-02-07T02: 00: 00Z, то местное время должно быть 2014-02-07T03: 00: 00Z

Почему я получаю 6 февраля 21 час. Это -5 часов от ожидаемого результата. Мой часовой пояс также - 5 часов.

(время составляет 24 часа формат)

Кто-нибудь есть какие-либо идеи о том, что я делаю неправильно?

+0

'gm = Time.parse (start_at.chop!). Utc' –

ответ

0

Я думаю, что у вас есть некоторые проблемы с пониманием того, как обрабатывать часовые пояса. Письмо Z в конце отметки времени указывает, что время UTC, поэтому, очевидно, ваш API предоставляет вам время в UTC. Когда вы удаляете его, используя chop! (обратите внимание, что вы можете просто использовать chop), Ruby больше не может сказать, что такое часовой пояс, поэтому он будет использовать ваш местный часовой пояс по умолчанию (я живу в UTC + 08: 00):

1.9.3-p484 :006 > Time.parse("2014-02-07T02:00:00Z") 
=> 2014-02-07 02:00:00 UTC 
1.9.3-p484 :007 > Time.parse("2014-02-07T02:00:00") 
=> 2014-02-07 02:00:00 +0800 

Использование Time.gm становится ненужным, так как у вас уже есть время в UTC (при условии, API всегда посылает вам временные метки в формате UTC).

Кроме того, то, что вы пытаетесь достичь, немного запутанно, потому что у вас есть хотя бы одна опечатка в вашем посте (если вы не пытаетесь получить местное время в Европе).

Смежные вопросы