Time.parseを使用して、文字列からTimeオブジェクトを作成しています。
何らかの理由で
Time.parse("05-14-2009 19:00")
範囲エラーの引数を引き起こしますが、
Time.parse("05-07-2009 19:00")
ではない
何か案は?
私の推測では、文字列の2番目の部分(14)が月になると予想しています。
文字列の形式がわかっている場合は、次を使用します。
Time.strptime(date, format, now=self.now) {|year| ...}
http://www.Ruby-doc.org/core-1.9/classes/Time.html#M000266
それはあなたの問題を解決し、おそらくTime.parse
よりも速いでしょう。
編集:
Timeクラスからstrptime
を取得したように見えますが、とにかくDate.strptime
と呼ばれていました。 Railsを使用している場合は、次のことができます。
Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time
pure Rubyを使用する場合は、次のものが必要です。
require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")
Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min],
d[:sec], d[:sec_fraction], d[:zone])
参照: Ruby on Rails の日付と時刻のフォーマットの問題。
これは、Time#parse
のヒューリスティックが原因です。
そして、それは英米のフォーマットによるものです。
ダッシュ '-'の場合はmm-dd-yyyyを予期し、スラッシュ '/'の場合はdd/mm/yyyyを予期します。
この動作変更 1.9では意図的に。 eur、iso、jpの日付基準を達成するため。
この問題を解決するためにおそらくそれは必要ありませんが、それでも自然言語の日付/時刻パーサーをチェックすることをお勧めします Chronic 、それは私に数回多くの仕事を節約しました。
おそらくDay-Month-Year形式を想定しているため、最初の値は14か月目の5日目を指定しようとしています。