रूबी ऑन रेल्स, डेटटाइम, टाइमस्टैम्प, टाइम और डेट में क्या अंतर है?


414

मेरे अनुभव में, तिथियां / समय सही होना जब प्रोग्रामिंग हमेशा खतरे और विचित्रता से भरा होता है।

रूबी और रेल्स ने मुझे हमेशा इस एक पर रखा है, यदि केवल विकल्पों की भारी संख्या के कारण; मुझे कभी कोई आइडिया नहीं है जो मुझे चुनना चाहिए।

जब मैं रेल का उपयोग कर रहा हूं और ActiveRecord डेटाटिप्स देख रहा हूं तो मैं निम्नलिखित पा सकता हूं

: डेटाइम,: टाइमस्टैम्प, समय, और: तारीख

और पता नहीं है कि क्या अंतर हैं या जहां गॉडक्स दुबक गए हैं।

क्या फर्क पड़ता है? आप इन्हें किसके लिए इस्तेमाल करते हैं?

(पुनश्च मैं रेल 3 का उपयोग कर रहा हूँ)

जवाबों:


572

ActiveRecord में विभिन्न दिनांक / समय स्वरूपों के बीच अंतर रेल और जो कुछ भी आप डेटाबेस का उपयोग कर रहे हैं, उसके साथ सब कुछ करना है।

एक उदाहरण के रूप में MySQL का उपयोग करना (कोई अन्य कारण है क्योंकि यह सबसे लोकप्रिय है के लिए है), तुम हो DATE, DATETIME, TIMEऔर TIMESTAMPस्तंभ डेटा प्रकार; आप बस के रूप में CHAR, VARCHAR, FLOATऔर INTEGER

तो, आप पूछते हैं, क्या अंतर है? खैर, उनमें से कुछ स्व-व्याख्यात्मक हैं। DATEकेवल एक तिथि संग्रहीत करता है, TIMEकेवल दिन का समय DATETIMEसंग्रहीत करता है , जबकि दोनों संग्रहीत करता है।

के बीच अंतर DATETIMEऔर TIMESTAMPथोड़ा अधिक सूक्ष्म है: DATETIMEके रूप में स्वरूपित है YYYY-MM-DD HH:MM:SS। मान्य पर्वतमाला वर्ष 1000 से वर्ष 9999 तक (और बीच में सब कुछ है। जब आप इसे डेटाबेस से लाते हैं तो समान TIMESTAMP दिखता है । यह वास्तव में यूनिक्स टाइमस्टैम्प के लिए सिर्फ एक मोर्चा है । इसकी वैध सीमा 1970 से 2038 तक है। अंतर यहाँ, विभिन्न निर्मित डेटाबेस इंजन के भीतर काम करता है, भंडारण स्थान है अलग से। क्योंकि DATETIMEभंडार वर्ष, माह दिन, घंटा, मिनट में हर अंकों और दूसरा, यह 8 बाइट्स की कुल उपयोग करता है। के रूप में TIMESTAMPकेवल संख्या संग्रहीत करता है 1970-01-01 के बाद से, यह 4 बाइट्स का उपयोग करता है।

आप MySQL में समय प्रारूपों के बीच मतभेदों के बारे में अधिक पढ़ सकते हैं यहाँ

अंत में, यह नीचे आता है कि आपको क्या करने के लिए अपनी तिथि / समय कॉलम की आवश्यकता है। क्या आपको 1970 से पहले या 2038 के बाद की तारीखों और समय को स्टोर करने की आवश्यकता है? का उपयोग करें DATETIME। क्या आपको डेटाबेस आकार के बारे में चिंता करने की ज़रूरत है और आप उस टाइमर के भीतर हैं? का उपयोग करें TIMESTAMP। क्या आपको केवल एक तारीख संग्रहीत करने की आवश्यकता है? का उपयोग करें DATE। क्या आपको केवल एक समय संग्रहीत करने की आवश्यकता है? का उपयोग करें TIME

यह सब कहने के बाद, रेल वास्तव में आपके लिए इनमें से कुछ निर्णय लेती है । दोनों :timestampऔर :datetimeलागू हो जाएगी DATETIME, जबकि :dateऔर :timeमेल खाती है करने के लिए DATEऔर TIME, क्रमशः।

इसका मतलब है कि रेल के भीतर, आपको केवल यह तय करना होगा कि आपको तारीख, समय या दोनों को संग्रहीत करने की आवश्यकता है या नहीं।


7
रिकॉर्ड के लिए, मैं पूर्ण टाइमस्टैम्प (यूनिक्स) को प्राथमिकता देता हूं क्योंकि YYYY-MM-DD प्रारूप उपयोग किए गए समय क्षेत्र पर निर्भर है। तो क्लाइंट को सर्वर के समय क्षेत्र को जानने की जरूरत है, और रूपांतरण करने की आवश्यकता है। सेकंड-1970 के बाद से पूर्ण टाइमस्टैम्प में वह समस्या नहीं है।
n13

32
@ n13 अच्छा बिंदु, लेकिन वास्तव में रेल में एक मुद्दा नहीं है, क्योंकि डेटाबेस में डेटासेट डालने से पहले यह यूटीसी में परिवर्तित हो जाता है।
वॉनकॉन्डर

13
यह रेल ब्रह्मांड में सबसे सहायक पदों में से एक है। यह रेल गाइड में जोड़ा जाना चाहिए ...
एंड्रयू

4
MySQL का TIMEकॉलम सख्ती से "दिन का समय" नहीं है, क्योंकि यह घंटे> 24 को स्वीकार करता है; यह "बीता हुआ समय" के रूप में भी प्रयोग करने योग्य है।
निकरिम

6
क्या अन्य डीबीएस में भी ऐसा ही है? उदा। पोस्टग्रेज?
एंडी हेडन 21

24
  1. : डेटाइम (8 बाइट्स)

    • स्टोर की तारीख और समय YYYY-MM-DD HH: MM: SS
    • Birth_date जैसे कॉलम के लिए उपयोगी है
  2. : टाइमस्टैम्प (4 बाइट्स)

    • 1970-01-01 से स्टोर की संख्या
    • अपडेटेड_एट, क्रिएट_ट जैसे कॉलम के लिए उपयोगी
  3. : दिनांक (3 बाइट्स)
    • स्टोर की तारीख
  4. : समय (3 बाइट्स)
    • स्टोर का समय

3
यह टीएल की तरह अधिक है: ऊपर दिए गए उत्तर के डीआर संस्करण
चिडोज़ी ननाचोर

0

यहाँ एक बढ़िया और सटीक स्पष्टीकरण मुझे मिला।

TIMESTAMP रिकॉर्ड के परिवर्तन को ट्रैक करने के लिए उपयोग किया जाता है, और हर बार रिकॉर्ड बदलने पर अपडेट किया जाता है। DATETIME विशिष्ट और स्थैतिक मूल्य को संग्रहीत करने के लिए उपयोग किया जाता है जो रिकॉर्ड में किसी भी परिवर्तन से प्रभावित नहीं होता है।

TIMESTAMP अलग-अलग TIME ZONE संबंधित सेटिंग से भी प्रभावित होता है। DATETIME स्थिर है।

TIMESTAMP ने संग्रहण के लिए आंतरिक रूप से वर्तमान समय क्षेत्र को UTC में परिवर्तित कर दिया, और पुनर्प्राप्ति के दौरान वापस वर्तमान समय क्षेत्र में परिवर्तित कर दिया। DATETIME ऐसा नहीं कर सकता।

TIMESTAMP 4 बाइट्स है और DATETIME 8 बाइट्स है।

TIMESTAMP समर्थित रेंज: '1970-01-01 00:00:01' UTC से '2038-01-19 03:14:07 IME UTC DATETIME समर्थित सीमा:' 1000-01-01 00:00:00 range से '9999 तक -12-31 23:59:59 :59

स्रोत: https://www.dbrnd.com/2015/09/difference-between-datetime-and-timestamp-in-mysql/#:~:text=DATETIME%20vs%20TIMETAMP%3A,DATETIME%20is%20constant

इसके अलावा ...

डेटाबेस के आधार पर विभिन्न कॉलम "तिथि" प्रकार और संबंधित रेल प्रवास प्रकारों के साथ तालिका

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.