0

次の行で無効な日付エラーが発生する理由を誰かが説明できますか?

Date.strptime("3082013",'%-m%d%Y')

私の理解で%-mは、先頭の のない月を探す必要があります0。ただし、このコードを実行すると戻ります

ArgumentError: invalid date

着信日付の形式を変更できないと仮定すると、この状況に対処する最善の方法は何ですか?

4

4 に答える 4

3

左にゼロを追加します。

Date.strptime("3082013".rjust(8,'0'),'%-m%d%Y')
于 2013-03-29T14:44:35.257 に答える
1

問題はstrptime、マイナス (-) フラグをサポートしていないことです。

于 2013-03-29T14:48:30.673 に答える
0

月/日/年の間に何らかのセパレーターを追加する必要があります。そうでなければ、Ruby は "3082013" が 2013 年 3 月 8 日なのか 2013 年 8 月 30 日なのかをどのように知るのでしょうか?

于 2013-03-29T14:44:11.580 に答える
0

場合によっては、少しレベルを下げて、Date.strptimeあなたのためにできることをしなければなりません:

"3082013".scan(/(\d+) (\d{2}) (\d{4})/x).first
=> ["3", "08", "2013"]

"308213"次のMMDDYYYY形式の場合:

mon, day, year = "03082013".scan(/(\d+) (\d{2}) (\d{4})/x).first.map(&:to_i)
=> [3, 8, 2013]

または、フォーマットされていることがわかっている場合は、次のようにDDMMYYYY切り替えます。monday

day, mon, year = "03082013".scan(/(\d+) (\d{2}) (\d{4})/x).first.map(&:to_i)
=> [3, 8, 2013]

次に、Date オブジェクトを作成できます。

Date.new(year, mon, day)
=> #<Date: 2013-03-08 ((2456360j,0s,0n),+0s,2299161j)>
于 2013-03-29T16:40:04.593 に答える