Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

जेपीए TemporalType.Date गलत तारीख दे रहा है

बहुत खेद है लेकिन अब तक के सभी उत्तर आम तौर पर गलत हैं। उत्तर काफी सरल है लेकिन इसके लिए हमें पांच बिंदुओं को अलग करना होगा:

  1. DATE =java.sql.Date, जो java.util.Date के चारों ओर एक आवरण है जो UTC समय-क्षेत्र में युग के बाद से मिलीसेकंड की संख्या है। तो यह एक निश्चित GMT+0 (UTC) समय-क्षेत्र में वर्ष/माह/तारीख/घंटे/मिनट/सेकंड है। ध्यान दें कि java.sql.Date समय घटकों को शून्य पर सेट करता है!
  2. TIMESTAMP =java.sql.TimeStamp जो दिनांक के आसपास एक घटक आवरण है जो SQL DATE प्रकार मानक का समर्थन करने के लिए भिन्नात्मक सेकंड जोड़ता है। यह वर्ग/प्रकार इस प्रश्न के लिए प्रासंगिक या आवश्यक नहीं है लेकिन संक्षेप में इसमें तिथि और समय शामिल है।
  3. डेटाबेस DATE ऑब्जेक्ट्स को परिभाषित के रूप में संग्रहीत करता है (यूटीसी का उपयोग जावा से ऑफ़सेट के रूप में) लेकिन हो सकता है समय का अनुवाद करें यदि डेटाबेस में एक अलग समय-क्षेत्र में कॉन्फ़िगर किया गया है। डिफ़ॉल्ट रूप से अधिकांश डेटाबेस स्थानीय सर्वर टाइमज़ोन के लिए डिफ़ॉल्ट होते हैं, जो एक बहुत बुरा विचार है। देवियो, सज्जनो ... हमेशा DATE की वस्तुओं को UTC में संग्रहित करते हैं। आगे पढ़ें...
  4. जेवीएम और टाइमज़ोन में समय सही होना चाहिए। चूंकि दिनांक वस्तु यूटीसी का उपयोग कर रही है, क्या आपके सर्वर-समय के लिए ऑफसेट की गणना की जा रही है? इस पर विचार करें कि इस सशक्त अनुशंसा के साथ कि सर्वर समय GMT+0 (UTC) पर सेट किया जाए।
  5. आखिरकार जब हम डेटाबेस से DATE को प्रस्तुत करना चाहते हैं (जेएसएफ या जो कुछ भी उपयोग कर रहे हैं), तो यह चाहिए GMT+0 टाइमज़ोन होने के लिए सेटअप करें और, यदि सर्वर से ऊपर की तरफ भी किया जाता है ... आपकी तिथियां और समय हमेशा सुसंगत, संदर्भात्मक और सभी अच्छी चीजें होंगी। जो कुछ बचा है वह समय प्रस्तुत करना है और यह वह जगह है जहां उपयोगकर्ता-एजेंट (उदाहरण के लिए वेब-एप्लिकेशन के लिए) कर सकता था उपयोगकर्ताओं को "स्थानीय" समय क्षेत्र में GMT+0 समय का अनुवाद करने के लिए उपयोग किया जाता है।

सारांश:सर्वर पर, डेटाबेस में, अपने Java ऑब्जेक्ट में UTC (GMT+0) का उपयोग करें।

DATE और TIMESTAMP केवल डेटाबेस के दृष्टिकोण से भिन्न हैं, TIMESTAMP सेकंड के अतिरिक्त अंशों को वहन करता है। दोनों GMT+0 (निहित) का उपयोग करते हैं। JodaTime इस सब से निपटने के लिए एक पसंदीदा कैलेंडर ढांचा है, लेकिन डेटाबेस समय-क्षेत्र सेटिंग्स में बेमेल JVM के मुद्दों को ठीक नहीं करेगा।

यदि जेवीएम से डीबी तक के एप्लिकेशन डिज़ाइन दिन के उजाले की बचत, घड़ी के समायोजन और दुनिया के स्थानीय घड़ियों में खेले जाने वाले अन्य सभी प्रकार के क्षेत्रीय खेलों के कारण जीएमटी का उपयोग नहीं करते हैं ... लेनदेन का समय और बाकी सब हमेशा के लिए तिरछा हो जाएगा , गैर-संदर्भित, असंगत, आदि।

डेटा प्रकारों के बारे में एक और अच्छा संबंधित उत्तर:java.util दिनांक बनाम java.sql.Date

यह भी ध्यान दें कि जावा 8 में बेहतर दिनांक/समय हैंडलिंग (अंत में) के साथ अपडेट हैं, लेकिन यह सर्वर घड़ी को ठीक नहीं करता है कि JVM एक टाइमज़ोन में चल रहा है और डेटाबेस दूसरे में हो। इस बिंदु पर हमेशा अनुवाद हो रहा है। मेरे साथ काम करने वाले प्रत्येक बड़े (स्मार्ट) क्लाइंट में, डेटाबेस और जेवीएम सर्वर टाइमज़ोन यूटीसी पर सेट होते हैं, भले ही उनके संचालन बड़े पैमाने पर किसी अन्य टाइमज़ोन में हों।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल से MySQL संग्रहीत प्रक्रिया को कैसे कॉल करें?

  2. MySQL कार्यक्षेत्र BLOB के रूप में परिणाम दिखाता है

  3. डेटाटाइम से मैसकल स्ट्रिप टाइम कंपोनेंट

  4. एकाधिक डेटाबेस और लेनदेन

  5. जब कोई शर्त नहीं है तो मैं एक प्रश्न कैसे वापस कर सकता हूं?