Преобразование метки времени UTC в ISO 8601 в рубине - PullRequest
80 голосов
/ 30 октября 2010

У меня есть метка времени в UTC

"2010-10-25 23:48:46 UTC"

Мне нужно преобразовать ее в ISO 8601

"2010-10-29 06: 09Z"

Документация запутана до чертиков - какой самый простой способ сделать это?

Ответы [ 3 ]

171 голосов
/ 30 октября 2010

Я думаю, вы пытаетесь нас обмануть.

Дата ввода вашего вопроса: 25 октября 2010 г. , а выходной - 29 октября 2010 г. . Хорошо сыграно!

Продолжая эту тему: вы точно также измените время и пропустите секунды из времени вывода.

Теперь верный ответ.

Сначала немного фактоидально: вывод ISO 8601 в Ruby аналогичен выводу «Объединенная дата и время» со страницы Википедии ISO 8601 .

У вас есть строка, и вам нужно преобразовать ее в Time объект, который вы можете сделать с to_time. Тогда нужно просто вызвать iso8601 для этого объекта, чтобы получить версию ISO 8601:

"2010-10-25 23:48:46 UTC".to_time.iso8601

Метод to_time любезно предоставлен Rails, в то время как iso8601 предоставлен стандартной библиотекой Ruby.

20 голосов
/ 21 августа 2013

После долгих экспериментов я обнаружил, что синтаксический анализатор библиотеки времени лучше, чем DateTime, хотя причины меня сейчас избегают.С этим предупреждением я всегда использую Time, а не DateTime для такого рода вещей, и документацию по ruby ​​также трудно понять, почему это так,

require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
3 голосов
/ 05 декабря 2011

Примечание. Прежде чем применять метод to_time, необходимо преобразовать (проанализировать) строку времени в объект времени.

ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
    from (irb):16

Правильная процедура:

irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")

irb> ut.iso8601
 => "2010-10-25T23:48:46+00:00" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...