Ruby on rails - 将csv导入rails时更改日期格式

时间:2017-04-01 18:21:49

标签: ruby-on-rails sqlite

我有一个csv文件要导入到ruby on rails上的sqlite3。 csv文件有一个日期列,格式为MM / DD / YYYY。 sqlite3中的日期格式为DD / MM / YYYY。如何在不更改csv文件的情况下转换为相同的格式?

1 个答案:

答案 0 :(得分:2)

首先,您以错误的格式在SQLite中存储日期。从罚款SQLite manual

  

<强> 2.2。日期和时间数据类型

     

SQLite没有预留用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXTREALINTEGER值:

     
      
  • TEXT为ISO8601字符串(&#34; YYYY-MM-DD HH:MM:SS.SSS&#34;)。
  •   
  • [...]
  •   

在SQLite中存储日期的推荐方法是使用ISO-8601格式(text)在YYYY-MM-DD列中,以便您可以使用SQLite函数来处理它们他们会正确比较/排序。

明智的做法是使用Ruby标准库中的Date.strptime来解析传入的日期:

date = Date.strptime(date_string_from_csv, '%m/%d/%Y')

然后使用Date#iso8601方法将其转换为ISO-8601日期字符串:

date_for_sqlite = date.iso8601

然后将date_for_sqlite发送到数据库中。作为奖励,任何理智的数据库都将明确地理解ISO-8601格式的日期,因此如果您切换数据库,则不必担心此问题。

如果您必须使用非标准DD/MM/YYYY格式,请使用strftime

date_for_sqlite = date.strftime('%d/%m/%Y')