2012-05-23 1 views
4

Я пытаюсь разобрать текстовое представление времени в объект времени Ruby.Разбор строки в RubyMotion

Обычно в рубин я бы сделал это так:

require 'time' 
Time.parse('2010-12-15T13:16:45Z') 
# => 2010-12-15 13:16:45 UTC 

В RubyMotion я не могу требовать и Time.parse LIBS не доступен:

(main)> require 'time' 
=> #<RuntimeError: #require is not supported in RubyMotion> 
(main)> 
(main)> Time.parse 
=> #<NoMethodError: undefined method `parse' for Time:Class> 

Есть ли способ требуется библиотека времени, предоставленная рубином, без необходимости копировать и переписывать весь код, чтобы сделать его совместимым с RubyMotion?

+0

Невозможно требовать ЛИЭС? Если это правда, вы должны убежать от него, крича. – pguardiario

+0

@pguardiario. Вы можете использовать сторонние библиотеки, продав их ([см. Docs] (http://www.rubymotion.com/developer-center/guides/project-management/#_using_3rd_party_libraries)). Я мог бы скопировать time.rb из ruby1.9 и удалить инструкцию 'require 'date''. Но я надеюсь, что есть лучший/более простой способ сделать это. – mordaroso

+0

У вас должен быть полный доступ к SDK для iOS. Там есть функции синтаксического анализа времени. –

ответ

11

Это не так, автоматически, но вы можете использовать NSDateFormatter

date_formatter = NSDateFormatter.alloc.init 
date_formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'" 
date = date_formatter.dateFromString "2010-12-15T13:16:45Z" 
puts date.description 
+0

Спасибо, что работает. 'date' уже является объектом Time, если вы делаете это так. 'date.class.ancestors # => [Time, Comparable, NSDate, NSObject, Kernel]' – mordaroso

11

Хотя Paul.s ответ, конечно, работает, это дает мне ползает, глядя на него в моем коде, так что я продолжал смотреть.

Мэтт Aimonetti в MacRuby книга имеет некоторые хорошие вещи:

http://books.google.ca/books?id=WPhdPzyU1R4C&pg=PA43&lpg=PA43&dq=macruby+nsdate&source=bl&ots=j7Y3J-oBcV&sig=FTr0KyKae-FinH-HNEWBcAAma1s&hl=en&sa=X&ei=ANT0T7mkEM6jqwHx7LjeAw&ved=0CGEQ6AEwBA#v=onepage&q=macruby%20nsdate&f=false

Где разборе так просто, как:

NSDate.dateWithString(<your date string here>) 

или

NSDate.dateWithNaturalLanguageString(<all kinds of date strings>) 

И если вы абсолютно необходимо имеют объект Time из этого:

Time.at(NSDate.date) 
+0

Удивительный! Спасибо за это – bodacious

+0

Спасибо за ваш дополнительный вход. – mordaroso

+0

Я не думаю, что NSDate.dateWithString доступен на iOS. Думаю, я бы отметил это, поскольку вопрос касался дат Rubymotion, а не MacRuby. –

2

BubbleWrap добавляет некоторые хорошие обертки вокруг этого:

Время

Класс времени Рубина был добавлен метод уровня класса для преобразования iso8601 отформатированной строки в экземпляр времени.

Time.iso8601 ("2012-05-31T19: 41: 33Z")
=> 2012-05-31 21:41:33 +0200

Это даст вам экземпляр NSDate, просто как тот.

+0

Время → сравнимое → NSDate → NSObject → Kernel – rodowi

+0

Лучше использовать Ruby Time class. Ссылка: [http://www.rubymotion.com/developer-center/guides/runtime/#_builtin_classes] (http://www.rubymotion.com/developer-center/guides/runtime/#_builtin_classes) – rodowi

+0

Как я могу потерять +0200 в конце? –

0

Возможно, это было исправлено. Я не разбираюсь в RubyMotion.

(main)> Time.parse("2016-01-21 10:33:07") 
=> "2016-01-21 10:33:07 -0800" 

RubyMotion 4,8

$ motion --version 
4.8