我正在尝试使用db / seed.rb文件和rake db:seed命令将一些数据植入我正在开发的Rails 3应用程序中。
我播种的数据涉及一个名为Meeting的数据库表,它有三列:string title,datetime startDate,datetime 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")
}])
答案 0 :(得分:12)
您可以尝试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")
}])
答案 1 :(得分:9)
请改用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)
}
])
答案 2 :(得分:2)
如果输入时间的细节不重要,您可以完全跳过以下格式:
Time.now.to_datetime
Time.now.to_datetime.end_of_day