0

Rails 3.2内のCSVからデータをインポートしてmongodbコレクションに保存すると、日付フィールドを除いてすべて正常に動作します。インポートされた日付形式は DD/MM/YYY です。インポートした日付を YYYY-MM-DD に変換するにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

次のように日付解析を使用できます。

Date.strptime('01/02/2003', '%d/%m/%Y').to_s    #=> "2003-02-01"
  • Date.strptimeDate指定された形式の文字列からオブジェクトを作成します

  • Date#to_sISO 8601形式(つまり、YYYY-MM-DD)で返します

ただし、CSVの大きさによって異なります。これによりDate、(少し醜い)文字列インデックス作成アプローチよりも少し遅い中間オブジェクトの束が作成されます。

def reformat_date(date)
  "#{date[6..9]}-#{date[3..4]}-#{date[0..1]}"
end

reformat_date('01/02/2003')     #=> "2003-02-01"

アップデート

興味があったので、いくつかの簡単なベンチマークを実行しました。日付の解析方法は、文字列の方法よりも約2.7倍遅くなりました(100万回の変換で5.289秒対1.981秒、Ruby 1.9.3 / Windows)。YMMV。

于 2012-10-09T23:04:23.023 に答える
1

あなたが必要があるかもしれません

require 'date'

次に、次のステートメントを使用して日付を解析します。

d = Date.strptime('09/10/2012', '%d/%m/%Y')

次の例を使用すると、正しい形式が返されます。

d.year #=> 2012
d.mon  #=> 10
d.day  #=> 9
d.strftime('%Y/%m/%d')  #=> "2012/10/09"

次に、データベースに保存します。私は mongodb には詳しくありませんが、何をすべきかはわかっているはずです。

日付の解析の詳細については、http://www.ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.htmlにアクセスしてください。

于 2012-10-09T23:08:42.657 に答える