在RubyMotion中将字符串解析为时间

在RubyMotion中将字符串解析为时间,ruby,rubymotion,Ruby,Rubymotion,我尝试将时间的文本表示解析为ruby time对象 通常在ruby中,我会这样做: 在RubyMotion中,我无法要求libs和Time.parse不可用: (main)> require 'time' => #<RuntimeError: #require is not supported in RubyMotion> (main)> (main)> Time.parse => #<NoMethodError: undefined metho

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

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

在RubyMotion中,我无法要求libs和Time.parse不可用:

(main)> require 'time'
=> #<RuntimeError: #require is not supported in RubyMotion>
(main)>
(main)> Time.parse
=> #<NoMethodError: undefined method `parse' for Time:Class>
(main)>需要“时间”
=> #
(主要)>
(main)>Time.parse

=>#它不是自动的,但您可以使用
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

虽然保罗的答案确实有效,但它让我毛骨悚然,在我的代码中看到它,所以我一直在寻找

Matt Aimonetti的MacRuby笔记本有一些好东西:

其中,解析非常简单:

NSDate.dateWithString(<your date string here>)
为此添加了一些漂亮的包装:

时间

Ruby类添加类级方法以转换 iso8601将字符串格式化为时间实例

时间。iso8601(“2012-05-31T19:41:33Z”)
=>2012-05-3121:41:33+0200


这将为您提供一个NSDate实例,就这么简单。

也许这已经被修复了。我在RubyMotion解析时间没问题

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

$ motion --version
4.8

无法要求LIB?如果为真,您应该逃离它。@pguardiario您可以通过出售第三方库()来使用它们。我可以从ruby1.9复制time.rb并删除
require'date'
语句。但我希望有更好/更简单的方法来实现这一点。您应该拥有对iOS SDK的完全访问权限。这里有时间解析函数。您需要使用Objective-C用于某些事情的相同API,因此
NSDate
NSDateFormatter
将完成这项工作。谢谢,这很有效<如果这样做,代码>日期
已经是时间对象
date.class.祖先#=>[Time,Comparable,NSDate,NSObject,Kernel]
感谢您的额外输入。我认为iOS上不提供NSDate.dateWithString。我想我应该标记一下,因为问题是关于RubyMoon的日期,而不是MacRuby。我知道已经很久了,但我想我应该解决Dave的警告。这在RubyMotion中很管用。你是我的英雄。dateFromString在iOS 7.1.1的iPhone4S上给了我零分。但它在iPad2和模拟器上运行良好。我用NSDate.dateWithNaturalLanguageString(string)改变了这一切,就像你建议的那样。像野兽一样工作!顺便说一句,我用的是RubyMotion 2.28。谢谢(根据这篇文章,这个问题也可能发生在iPhone5上:)时间→ 可比较的→ NSDate→ NSObject→ KernelBetter使用Ruby时间类。参考:我如何才能在最后松开+0200?检查ruby文档中的strftime以定义自定义时间格式。例如
time.iso8601(“2012-05-31T19:41:33Z”)。strftime(“%m/%d/%Y”)
您必须使用
运动支持
gem。
Time.at(NSDate.date)
(main)> Time.parse("2016-01-21 10:33:07")
=> "2016-01-21 10:33:07 -0800"
$ motion --version
4.8