2

2011年 12 月 1 日(mm/dd/yyyy) 形式のMySQL にインポートするときに、csv ファイルの日付を変更する方法がわかりません。MySQL は yyyy/mm/dd にあります。

これどうやってするの?

私のレーキファイル

require 'csv'
require 'date'

desc "Import gac from csv file"
task :import => [:environment] do
  Dir.chdir("#{Rails.root}/lib/assets")
  csv_file = "file.csv" 
  CSV.foreach(csv_file, :headers => true) do |row|
    Institution.create({
      :company => row[0],
      :solveid => row[2],
      :phone => row[5],
      :other => row[6],
      :clientdate => (DateTime.strptime row[7], "%m/%d/%Y").strftime "%Y/%m/%d", 
      :cunumber => row[1],
      :street => row[8], 
      :city => row[9], 
      :state_id => row[4], 
      :zip => row[10],
      :source => row[11], 
      :source2 => row[12],
      :demodate1 => (DateTime.strptime row[13], "%m/%d/%Y").strftime "%Y/%m/%d",
      :demodate2 => (DateTime.strptime row[14], "%m/%d/%Y").strftime "%Y/%m/%d",
      :demodate3 => (DateTime.strptime row[15], "%m/%d/%Y").strftime "%Y/%m/%d",
      :client => row[17],
      :prospect => row[19], 
      :alliedlead => row[16], 
      :notcontacted => row[18]
    })
  end
end

これは私にエラーを与えています。

rake import
rake aborted!
/Users/dave/rails_projects/allied_contest/lib/tasks/intitutions.rake:14: syntax error, unexpected tSTRING_BEG, expecting '}'
... row[7], "%m/%d/%Y").strftime "%Y/%m/%d", 
...                               ^
/Users/dave/rails_projects/allied_contest/lib/tasks/intitutions.rake:14: syntax error, unexpected ',', expecting keyword_end
...%m/%d/%Y").strftime "%Y/%m/%d", 
...                               ^
4

2 に答える 2

3
   if row[7].present?
      date = row[7].split("/")
      new_date = "#{date[2]}/#{date[0]}/#{date[1]}"
   else
     new_date = "N/A"
   end

EDIT: あなたが得ているエラーは、行がnilであるためです。nil のチェックを追加しました。

于 2012-11-02T03:32:03.130 に答える
2

日付を検証する必要がある場合は、 メソッドDateTime::strptimeDateTime#strftimeメソッドを使用できます。

require 'date'

# ... snip ...
:clientdate => DateTime.strptime(row[7], "%m/%d/%Y").strftime("%Y/%m/%d")
于 2012-11-02T03:35:37.660 に答える