2011-03-29 26 views
10

मैं डीबी/seed.rb फ़ाइल और रेक डीबी: बीज कमांड का उपयोग कर एक रेल 3 एप में कुछ डेटा बीज करने की कोशिश कर रहा हूं।रेल: बीजिंग डेटाबेस डेटा और दिनांक प्रारूप

डेटा जो मैं बीजिंग कर रहा हूं उसमें मीटिंग नामक डेटाबेस तालिका शामिल है जिसमें तीन कॉलम हैं: स्ट्रिंग शीर्षक, डेटाटाइम स्टार्टडेट, डेटाटाइम एंडडेट। जिस समय मैं सम्मिलित करने की कोशिश कर रहा हूं वह "मिमी/डीडी/yyyy hh: mm" प्रारूप में है - उदाहरण के लिए। "01/02/2003 13:23" = 2 जनवरी, 2003 1:23 अपराह्न। हालांकि, DateTime.parse() लगातार "अमान्य तिथि" त्रुटि के साथ त्रुटि कर रहा है - क्योंकि यह "dd/mm/yyyy" प्रारूप में दिनांकों को पार्स करने का प्रयास करता है।

मेरे गुगलिंग से, मुझे विश्वास है कि डेटटाइम ऑब्जेक्ट्स को पार्स करते समय संकलक उस स्ट्रिंग को देखता है जो पारित होता है और कुछ जल्दी पैटर्न मिलान करता है और फिर "mm/dd/yyyy" और "dd-mm" -yyy "तदनुसार अमेरिकी/ब्रिटिश (आदि) मानकों के आधार पर एक स्लेश या डैश एक सेपरेटर के रूप में इस्तेमाल किया गया था या नहीं। यह मामला प्रतीत नहीं होता है, हालांकि, और मैं सोच रहा हूं क्यों। और इसे कैसे ठीक करें।

इस तरह मैं बैठकें बीजिंग कर रहा हूं - पहला एक सही ढंग से पारदर्शी है, दूसरा विफल रहता है।

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

+0

@ fl00r नहीं जो काम नहीं करता; मैंने "09/01/2009 08:00" के लिए एक बीज जोड़ा और यह काम किया। यह तिथियां मुश्किल हैं। –

+0

पार्सर के लिए अपनी तिथियों को एक और स्पष्ट प्रारूप में डालने का प्रयास करें: '200 9 -10-01 8: 00' –

उत्तर

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

+0

गुम कॉमा ने जोड़ा। धन्यवाद @Acrux। –

2

दर्ज की गई समय की विशिष्टताओं के महत्वपूर्ण नहीं हैं, तो आप पूरी तरह से साथ स्वरूपण को छोड़ सकते हैं:

Time.now.to_datetime 
Time.now.to_datetime.end_of_day 
संबंधित मुद्दे