2015-03-27 3 views
0

Я работаю с строками Date в Ruby и хочу определить, была ли строка передана с часовым поясом или нет (кроме простого разбора текста). Если часовой пояс не указан, я хочу преобразовать его в определенный часовой пояс, зависящий от других факторов.Ruby: получить компонент TimeZone строки

Пример:

DateTime.parse("2014-01-01T23:59:00") 
=> #<DateTime: 2014-01-01T23:59:00+00:00 ((2456659j,86340s,0n),+0s,2299161j)> 
DateTime.parse("2014-01-01T23:59:00Z") 
=> #<DateTime: 2014-01-01T23:59:00+00:00 ((2456659j,86340s,0n),+0s,2299161j)> 
DateTime.parse("2014-01-01T23:59:00PST") 
=> #<DateTime: 2014-01-01T23:59:00-08:00 ((2456660j,28740s,0n),-28800s,2299161j)> 

Проблема заключается в том, что анализ "2014-01-01T23: 59: 00" и "2014-01-01T23: 59: 00Z" (с зулу) дает тот же результат, когда указывается «Зулу», а другой нет. Я уверен, что поведение по умолчанию - принять UTC, если зона не указана.

+0

не Z в то же время, как зона UTC? Я не понимаю проблему – tlehman

+0

Это, но я хочу определить, когда строка НЕ ​​задает какой-либо часовой пояс ('Z' или иначе) – Devin

+0

Получил ли он, и вы полагаете, что вход всегда в формате ISO 8601? – tlehman

ответ

0

Чтобы проверить, что строка даты не заканчивается с часовым поясом, вы можете проверить, что минуты и секунды до конца строки, используя это регулярное выражение: \d{2}:\d{2}$

Вот некоторые примеры использования debuggex для иллюстрации:

\d{2}:\d{2}$ 

Regular expression visualization

Debuggex Demo

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

  • Нет связанных вопросов^_^