У меня есть метка времени, которая находится в UTC
"2010-10-25 23:48:46 UTC"
Мне нужно преобразовать его в ISO 8601
"2010-10-29 06: 09Z"
Документация сбивает с толку как ад - что это самый простой способ сделать это?
У меня есть метка времени, которая находится в UTC
"2010-10-25 23:48:46 UTC"
Мне нужно преобразовать его в ISO 8601
"2010-10-29 06: 09Z"
Документация сбивает с толку как ад - что это самый простой способ сделать это?
Я думаю, вы пытаетесь обмануть нас.
Дата ввода на ваш вопрос - 25 октября 2010 года, а выход - 29th октября 2010 года. Хорошо сыграл!
Продолжая этот нит-выбор: ваши времена также совершенно разные, и вам не хватает секунд с момента выхода.
Теперь для истинного ответа.
Вначале небольшой факт: выход ISO 8601 в Ruby похож на вывод "Комбинированные даты и времени" из ISO 8601, страница Wikipedia.
У вас есть строка, поэтому вам нужно будет преобразовать ее в объект Time
, который вы можете сделать с помощью to_time
. Тогда просто вопрос вызова iso8601
на этом объекте для получения версии ISO 8601:
"2010-10-25 23:48:46 UTC".to_time.iso8601
Метод to_time
любезно предоставлен Rails, а iso8601
является придворной стандартной библиотекой Ruby.
После долгих экспериментов я нахожу, что парсер Time Library лучше, чем DateTime, хотя причины меня избегают в данный момент. С этим предостережением я всегда использую Time, а не DateTime для такого рода вещей, и рубиновая документация также трудно понять, почему это так,
require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Примечание: вам нужно преобразовать (разбор) временную строку во временный объект, прежде чем вы сможете применить метод 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"