2012-11-02 60 views
2

不確定如何在導入到MySQL中時更改我的csv文件中的日期,格式爲12/1/2011(mm/dd/yyyy)格式。 MySQL以yyyy/mm/dd爲單位。在Rails CSV上更改日期格式導入MYSQL

我該怎麼做?

我耙文件

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", 
...        ^

回答

2

如果您需要驗證的日期,那麼你可以使用DateTime::strptimeDateTime#strftime方法:

require 'date' 

# ... snip ... 
:clientdate => DateTime.strptime(row[7], "%m/%d/%Y").strftime("%Y/%m/%d") 
+0

肖恩...我不斷收到以下錯誤:耙中止! /Users/dave/rails_projects/allied_contest/lib/tasks/intitutions.rake:14:語法錯誤,意外的tSTRING_BEG,期待'}' ... row [7],「%m /%d /%Y」) .strftime「%Y /%m /%d」, ...^ /Users/dave/rails_projects/allied_contest/lib/tasks/intitutions.rake:14:語法錯誤,意外的',',期待keyword_end 。 ...%m /%d /%Y「)。strftime」%Y /%m /%d「, – DaveG

+0

@DaveG - 這可能是您需要方法調用括號的情況之一 - 我更新了我的答案。 –

+0

我確定這是有效的,我想我需要檢查nil值,因爲日期不是在所有的字段中。下面的錯誤:「不能將nil轉換成字符串」 – DaveG

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

編輯: 你所得到的錯誤是因爲該行是零。我已經添加了一個支票零。

+0

約翰,我會怎麼做這與行?它應該是行[7] =行[7] .split(「/」)還是類似的東西? – DaveG

+0

date = row [7] .split(「/」)應該工作 – John

+0

John得到以下內容:rake中止! 未定義的方法'拆分'爲零:NilClass – DaveG