ActiveRecord में विभिन्न दिनांक/समय प्रारूपों के बीच का अंतर थोड़ा रेल के साथ क्या करना है और सब कुछ जो भी डेटाबेस का उपयोग कर रहे साथ क्या करना है।
एक उदाहरण के रूप में MySQL का उपयोग करना (कोई अन्य कारण है क्योंकि यह सबसे लोकप्रिय है के लिए है), आप DATE
, DATETIME
, TIME
और TIMESTAMP
स्तंभ डेटा प्रकार है; जैसे आपके पास CHAR
, VARCHAR
, FLOAT
और INTEGER
है।
तो, आप पूछते हैं, क्या अंतर है? खैर, उनमें से कुछ स्वयं व्याख्यात्मक हैं। DATE
केवल एक तारीख को स्टोर करता है, TIME
केवल दिन का समय संग्रहीत करता है, जबकि DATETIME
दोनों स्टोर करता है। DATETIME
YYYY-MM-DD HH:MM:SS
इस प्रारूप में उपलब्ध है:
DATETIME
और TIMESTAMP
के बीच अंतर में थोड़ा और अधिक सूक्ष्म है। वैध श्रेणी वर्ष 1000 से वर्ष 99 99 तक (और TIMESTAMP
दिखती है जब आप इसे डेटाबेस से लाते हैं, तो यह वास्तव में unix timestamp के लिए एक मोर्चा है। इसकी वैध सीमा 1 9 70 से 2038 तक है। डाटाबेस इंजन के भीतर विभिन्न अंतर्निर्मित कार्यों से अलग अंतर, भंडारण स्थान है। क्योंकि DATETIME
वर्ष, महीने, घंटे, मिनट और दूसरे में प्रत्येक अंक को स्टोर करता है, यह कुल 8 बाइट्स का उपयोग करता है। TIMESTAMP
केवल 1970-01-01 के बाद से सेकंड की संख्या संग्रहीत करता है, यह 4 बाइट का उपयोग करता है।
आप MySQL here में समय प्रारूपों के बीच मतभेदों के बारे में और अधिक पढ़ सकते हैं।
अंत में, यह आपके दिनांक/समय कॉलम की आवश्यकता के अनुसार आता है। क्या आपको 1 9 70 से पहले या 2038 के बाद तारीखों और समयों को स्टोर करने की आवश्यकता है? DATETIME
का प्रयोग करें। क्या आपको डेटाबेस आकार के बारे में चिंता करने की ज़रूरत है और आप उस टाइमरेंज के भीतर हैं? TIMESTAMP
का प्रयोग करें। क्या आपको केवल तारीख को स्टोर करने की आवश्यकता है? DATE
का उपयोग करें। क्या आपको केवल एक समय स्टोर करने की आवश्यकता है? TIME
का उपयोग करें।
यह सब कहकर, रेल वास्तव में आपके लिए इनमें से कुछ निर्णय बनाता है। :timestamp
और :datetime
दोनों DATETIME
पर डिफ़ॉल्ट होंगे, जबकि :date
और :time
क्रमशः DATE
और TIME
से मेल खाते हैं।
इसका मतलब है कि रेल के भीतर, आपको केवल यह तय करना होगा कि आपको दिनांक, समय या दोनों को स्टोर करने की आवश्यकता है या नहीं।
रिकॉर्ड के लिए, मैं पूर्ण टाइमस्टैम्प (यूनिक्स) पसंद करता हूं क्योंकि वाई वाई वाई वाई-एमएम-डीडी प्रारूप इस्तेमाल किए गए समय क्षेत्र पर निर्भर है। तो ग्राहक को सर्वर के समय क्षेत्र को जानने की जरूरत है, और रूपांतरण करने की आवश्यकता है। सेकेंड-1 9 70 के बाद से पूर्ण टाइमस्टैम्प में यह समस्या नहीं है। – n13
@ n13 अच्छा बिंदु, लेकिन वास्तव में रेल में कोई समस्या नहीं है, क्योंकि यह डेटाबेस में डेटाटाइम डालने से पहले यूटीसी में परिवर्तित हो जाती है। – vonconrad
यह रेल ब्रह्मांड में सबसे उपयोगी पोस्टों में से एक है। इसे रेल गाइड में जोड़ा जाना चाहिए ... – Andrew