Ruby Time.parseで範囲外エラーが発生する
-
03-07-2019 - |
質問
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
純粋なルビーを使用する場合は、次が必要です:
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])
Time#parse
のヒューリスティックのためです。
そして、それは英国系のフォーマットによるものです。
ダッシュ「-」ではmm-dd-yyyyを期待し、スラッシュ「/」ではdd / mm / yyyyを期待します。
この動作は、1.9で意図的に変更されます。 eur、iso、jpの日付標準を達成するため。
この問題を解決するのにおそらく必要ありませんが、自然言語の日付/時刻パーサー Chronicをチェックアウトすることをお勧めします、それは私に数回多くの仕事を節約しました。
おそらく、Day-Month-Year形式を想定しているため、最初の値は14か月目の5日目を指定しようとしています。
所属していません StackOverflow