ruby Rails:设定数据库数据和日期格式的种子

i2byvkas  于 2022-11-04  发布在  Ruby
关注(0)|答案(4)|浏览(127)

我试图使用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()总是错误地输出“invalid date”错误--因为它试图解析“dd/mm/yyyy”格式的日期。
从我的谷歌搜索中,我相信当解析DateTime对象时,编译器会查看传入的字符串,并进行一些快速的模式匹配,然后根据美国/英国(等)的标准,根据是否使用斜杠或破折号作为分隔符,相应地Map“mm/dd/yyyy”和“dd-mm-yyyy”。然而,情况似乎并非如此,我想知道为什么,以及如何修复它。
这就是我播种Meetings的方式--第一个正确解析,第二个失败。

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")
  }])
vwoqyblh

vwoqyblh1#

你可以试试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")
  }])
gev0vcfq

gev0vcfq2#

使用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)
  }
])
dba5bblo

dba5bblo3#

如果输入时间的细节不重要,您可以完全跳过格式化:

Time.now.to_datetime
Time.now.to_datetime.end_of_day

相关问题