4

時間のテキスト表現をルビーの Time オブジェクトに解析しようとしています。

通常、ルビーでは次のようにします。

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

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>

RubyMotion と互換性を持たせるためにコード全体をコピーして書き直すことなく、ruby が提供する time ライブラリを要求する方法はありますか?

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 book には、いくつかの優れた内容があります。

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=cruby%cruby&ved=0CGEQ6AEw% 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"

ルビーモーション 4.8

$ motion --version
4.8
于 2016-01-21T18:34:31.907 に答える