4

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

通常在红宝石中我会这样做:

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

在 RubyMotion 中,我无法要求库并且 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

4 回答 4

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
于 2012-05-23T11:20:45.860 回答
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=0CGEQ=macEQAEwBA#%% 20nsdate&f=false

解析很简单:

NSDate.dateWithString(<your date string here>)

或者

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

如果你绝对必须有一个 Time 对象:

Time.at(NSDate.date)
于 2012-07-04T23:45:40.207 回答
2

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

时间

Time Ruby 类添加了一个类级方法,用于将 iso8601 格式的字符串转换为 Time 实例。

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

这会给你一个 NSDate 实例,就这么简单。

于 2012-09-27T17:29:26.243 回答
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
于 2016-01-21T18:34:31.907 回答