2011-03-29 68 views
10

我試圖使用db/seed.rb文件和rake db:seed命令將一些數據種入我正在開發的Rails 3應用程序。Rails:播種數據庫數據和日期格式

我要播種的數據涉及一個名爲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") 
    }]) 
+0

嘗試將零加到小時': startDate => DateTime.parse(「09/14/2009 08:00」)' – fl00r 2011-03-29 14:38:21

+0

@ fl00r沒有沒有工作;我爲「09/01/2009 08:00」添加了一個種子,並且工作正常。這是困難的日期。 – 2011-03-29 14:46:52

+0

試着把你的日期放在一個更明顯的解析器格式中:'2009-09-01 8:00' – 2011-03-31 04:09:41

回答

9

您可以嘗試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") 
    }]) 
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) 
    } 
]) 
+1

不要忘記逗號:startDate => DateTime.new(2009,9,14,8), – Acrux 2017-07-29 20:05:23

+0

缺少逗號添加。謝謝@Acrux。 – 2017-07-30 20:29:45

2

如果輸入的時間細節並不重要,你完全可以跳過帶有格式:

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