2010-10-13 9 views
364

मेरे अनुभव में, प्रोग्रामिंग हमेशा खतरे और difficulity से भरा हुआ है जब तारीख/समय सही हो रही है।रेल पर रूबी में, डेटटाइम, टाइमस्टैम्प, समय और तिथि के बीच क्या अंतर है?

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

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

पा सकते हैं: दिनांक,: टाइमस्टैम्प,: समय, और: तिथि

और पता नहीं क्या है मतभेद हैं या जहां गॉथस लुक है।

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

(पी एस मैं Rails3 उपयोग कर रहा हूँ)

उत्तर

508

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

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

तो, आप पूछते हैं, क्या अंतर है? खैर, उनमें से कुछ स्वयं व्याख्यात्मक हैं। DATE केवल एक तारीख को स्टोर करता है, TIME केवल दिन का समय संग्रहीत करता है, जबकि DATETIME दोनों स्टोर करता है। DATETIMEYYYY-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 से मेल खाते हैं।

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

+6

रिकॉर्ड के लिए, मैं पूर्ण टाइमस्टैम्प (यूनिक्स) पसंद करता हूं क्योंकि वाई वाई वाई वाई-एमएम-डीडी प्रारूप इस्तेमाल किए गए समय क्षेत्र पर निर्भर है। तो ग्राहक को सर्वर के समय क्षेत्र को जानने की जरूरत है, और रूपांतरण करने की आवश्यकता है। सेकेंड-1 9 70 के बाद से पूर्ण टाइमस्टैम्प में यह समस्या नहीं है। – n13

+27

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

+9

यह रेल ब्रह्मांड में सबसे उपयोगी पोस्टों में से एक है। इसे रेल गाइड में जोड़ा जाना चाहिए ... – Andrew

1
  1. : datetime (8 बाइट्स)

    • स्टोर दिनांक और समय स्वरूपित YYYY-MM-YYY HH: MM: SS
    • birth_date
  2. तरह स्तंभों के लिए उपयोगी: टाइमस्टैम्प (4 बाइट्स)

    • स्टोर संख्या 1970-01-01
    • updated_at तरह स्तंभों के लिए उपयोगी के बाद से सेकंड के आर, created_at
  3. : तिथि (3 बाइट्स)
    • स्टोर तिथि
  4. : समय (3 बाइट्स)
    • स्टोर समय
संबंधित मुद्दे