我有一個csv文件可以在rails上導入到sqlite3中。 csv文件有一個日期列,格式爲MM/DD/YYYY。 sqlite3中的日期被格式化爲DD/MM/YYYY。如何在不更改csv文件的情況下轉換爲相同的格式?Ruby on rails - 在導入csv到rails時更改日期格式
回答
首先,你在SQLite中以錯誤的格式存儲日期。從罰款SQLite manual:
2.2。日期和時間數據類型
SQLite沒有專門用於存儲日期和/或時間的存儲類。取而代之的是,SQLite的的內置日期和時間函數能夠存儲日期和時間爲
TEXT
,REAL
,或INTEGER
值:
TEXT
爲ISO8601字符串(「YYYY-MM-DD HH:MM:SS .SSS「)。- [...]
存儲在SQLite的日期將是使用ISO-8601格式(YYYY-MM-DD
),這樣就可以使用SQLite的職能與工作一text
列的推薦方法他們和他們會比較/排序正確。
的明智的做法是解析傳入日期使用Date.strptime
從Ruby的標準庫:
date_for_sqlite = date.iso8601
:
date = Date.strptime(date_string_from_csv, '%m/%d/%Y')
,然後使用Date#iso8601
方法將其轉換成一個ISO-8601的日期字符串
然後發送date_for_sqlite
到數據庫中。作爲獎勵,任何理智的數據庫都將毫不含糊地理解ISO-8601格式化日期,因此如果切換數據庫,則不必擔心此問題。
如果必須使用非標準DD/MM/YYYY
格式然後使用strftime
:
date_for_sqlite = date.strftime('%d/%m/%Y')
謝謝。我的csv文件有多行,我使用'namespace:db do task:import_csv =>:environment do CSV.foreach(「sample_landslides.csv」,:headers => true)do | row | Landslide.create!(row.to_hash)'將整個文件導入到rails中。我想刪除當前的日期列,並將轉換日期列日期列導入它。我怎樣才能做到這一點? –
爲什麼不刪除表格,然後用適當的日期格式重新導入它?那裏有新的數據需要保存嗎? –
- 1. 在Ruby on Rails上導入csv文件
- 2. Ruby on Rails的 - 導入CSV文件
- 3. 更改日期格式時到csv
- 4. 導入csv到Rails的日期錯誤
- 5. CSV CSV導入時的日期更改
- 6. Ruby on Rails - 日期比較
- 7. Ruby on Rails:日期搜索
- 8. 格式化導致Ruby on Rails的
- 9. Ruby on Rails的 - JSON格式
- 10. 在Ruby on Rails中處理BC日期
- 11. 我收到一個錯誤導入CSV文件,Ruby on Rails的
- 12. Ruby on Rails:日期選取器不保存格式
- 13. Ruby on Rails的:格式化日期字段中
- 14. Ruby on Rails 4引導日期時間選擇器設置
- 15. 使用fastercsv和CSV :: Writer(Ruby on Rails)導出到csv
- 16. Ruby on rails表格
- 17. 帶日期的文本字段,如何更改Rails期望的日期格式?
- 18. Rails日期格式
- 19. SAS導入excel日期格式更改
- 20. Ruby on Rails - 將日期時間哈希轉換爲日期
- 21. Ruby on Rails的日期時間選擇不更新數據庫
- 22. 在Ruby on Rails中更改request.remote_ip的值
- 23. Ruby on Rails的轉換日期和時間值格式正確的UTC時間
- 24. Ruby on Rails日期字段驗證
- 25. Ruby on Rails的日期checking..help請
- 26. Ruby on Rails 3.1的發佈日期
- 27. Ruby on Rails 3發佈日期
- 28. Ruby on Rails中的日期定製
- 29. Ruby on Rails的DIFF兩個日期
- 30. Ruby on Rails的CSV從移動到FasterCSV
在你的SQLite數據庫,日期存儲在實際的日期列,我希望? –
是的,它存儲在一列 –
顯然,它是一個列,但是那個列的類型是什麼? –