Rails:播种数据库数据和日期格式
Posted
技术标签:
【中文标题】Rails:播种数据库数据和日期格式【英文标题】:Rails: seeding database data and date formats 【发布时间】:2011-07-25 08:30:44 【问题描述】:我正在尝试使用 db/seed.rb 文件和 rake db:seed 命令将一些数据植入我正在开发的 Rails 3 应用程序中。
我正在播种的数据涉及一个名为 Meeting 的数据库表,该表具有三列:字符串标题、日期时间 startDate、日期时间 endDate。我试图插入的日期时间是“mm/dd/yyyy hh:mm”格式——例如。 “01/02/2003 13:23”= 2003 年 1 月 2 日下午 1:23。但是,DateTime.parse() 始终出现“无效日期”错误——因为它试图以“dd/mm/yyyy”格式解析日期。
从我的谷歌搜索中,我被引导相信,在解析 DateTime 对象时,编译器会查看传入的字符串并进行一些仓促的模式匹配,然后映射“mm/dd/yyyy”和“dd-mm- yyyy”,因此根据美国/英国(等)标准,根据是否使用斜线或破折号作为分隔符。然而,情况似乎并非如此,我想知道为什么。以及如何解决它。
这就是我播种会议的方式——第一个正确解析,第二个失败。
Meeting.create([
:title => "This meeting parses fine",
:startDate => DateTime.parse("09/01/2009 17:00"),
:endDate => DateTime.parse("09/01/2009 19:00")
,
:title => "This meeting errors out",
:startDate => DateTime.parse("09/14/2009 8:00")
:endDate => DateTime.parse("09/14/2009 9:00")
])
【问题讨论】:
尝试将零添加到小时:startDate => DateTime.parse("09/14/2009 08:00")
@fl00r 不,那没用;我为“09/01/2009 08:00”添加了一个种子并且有效。困难的是日期。
尝试将日期以更明显的格式供解析器使用:2009-09-01 8:00
我正在播种 700 个日期;重写它们不是一种选择。坦率地说,我的谷歌搜索表明 mm/dd/yyyy 是解析器的明显格式。 :)
【参考方案1】:
你可以试试Date.strptime
:startDate => DateTime.parse("09/14/2009 8:00")
#=>
:startDate => DateTime.strptime("09/14/2009 8:00", "%m/%d/%Y %H:%M")
所以
Meeting.create([
:title => "This meeting parses fine",
:startDate => DateTime.strptime("09/01/2009 17:00", "%m/%d/%Y %H:%M"),
:endDate => DateTime.strptime("09/01/2009 19:00", "%m/%d/%Y %H:%M")
,
:title => "This meeting errors out",
:startDate => DateTime.strptime("09/14/2009 8:00", "%m/%d/%Y %H:%M")
:endDate => DateTime.strptime("09/14/2009 9:00", "%m/%d/%Y %H:%M")
])
【讨论】:
【参考方案2】:请改用DateTime.new
。不用担心正确解析。
Meeting.create([
:title => "This meeting parses fine",
:startDate => DateTime.new(2009,9,1,17),
:endDate => DateTime.new(2009,9,1,19)
,
:title => "This meeting errors out",
:startDate => DateTime.new(2009,9,14,8),
:endDate => DateTime.new(2009,9,14,9)
])
【讨论】:
别忘了 :startDate => DateTime.new(2009,9,14,8) 中的逗号, 添加了缺少的逗号。谢谢@Acrux。【参考方案3】:如果输入时间的细节不重要,您可以完全跳过格式化:
Time.now.to_datetime
Time.now.to_datetime.end_of_day
【讨论】:
以上是关于Rails:播种数据库数据和日期格式的主要内容,如果未能解决你的问题,请参考以下文章