在RubyMotion中解析字符串到时间

时间:2012-05-23 10:29:15

标签: ruby rubymotion

我尝试将时间的文本表示解析为ruby Time对象。

通常在ruby中,我会这样做:

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

在RubyMotion中,我无法使用lib并且Time.parse不可用:

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

有没有办法要求ruby提供的时间库而不必复制和重写整个代码以使其与RubyMotion兼容?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:11)

虽然Paul.s的答案肯定有效,但是它给了我毛骨悚然,在我的代码中查看它,所以我一直在寻找。

Matt 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)

答案 2 :(得分:2)

BubbleWrap为此添加了一些不错的包装器:

  

时间

     

时间Ruby类添加了一个类级别方法来转换   iso8601将字符串格式化为Time实例。

     

Time.iso8601( “2012-05-31T19:41:33Z”)
  =&GT; 2012-05-31 21:41:33 +0200

这将为您提供一个简单的NSDate实例。

答案 3 :(得分: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