我尝试将时间的文本表示解析为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兼容?
答案 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书中有一些好东西:
解析简单如下:
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