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

java.sql.Timestamp समयक्षेत्र विशिष्ट है?

हालांकि यह setTimestamp(int parameterIndex, Timestamp x) के लिए स्पष्ट रूप से निर्दिष्ट नहीं है ड्राइवरों को setTimestamp(int parameterIndex, Timestamp x, Calendar cal) द्वारा स्थापित नियमों का पालन करना होगा जावाडोक:

<ब्लॉकक्वॉट>

निर्दिष्ट पैरामीटर को दिए गए java.sql.Timestamp . पर सेट करता है दिए गए Calendar . का उपयोग करके मान वस्तु। ड्राइवर Calendar . का उपयोग करता है SQL TIMESTAMP बनाने के लिए ऑब्जेक्ट करें मान, जिसे ड्राइवर तब डेटाबेस को भेजता है। Calendar . के साथ ऑब्जेक्ट, ड्राइवर कस्टम समय क्षेत्र को ध्यान में रखते हुए टाइमस्टैम्प की गणना कर सकता है। यदि नहीं Calendar ऑब्जेक्ट निर्दिष्ट है, ड्राइवर डिफ़ॉल्ट समय क्षेत्र का उपयोग करता है, जो कि एप्लिकेशन चलाने वाली वर्चुअल मशीन का है।

जब आप setTimestamp(int parameterIndex, Timestamp x) . के साथ कॉल करते हैं JDBC ड्राइवर उस समय क्षेत्र में टाइमस्टैम्प की तारीख और समय की गणना करने के लिए वर्चुअल मशीन के समय क्षेत्र का उपयोग करता है। यह दिनांक और समय वह है जो डेटाबेस में संग्रहीत होता है, और यदि डेटाबेस कॉलम समय क्षेत्र की जानकारी संग्रहीत नहीं करता है, तो क्षेत्र के बारे में कोई भी जानकारी खो जाती है (जिसका अर्थ है कि यह डेटाबेस का उपयोग करने वाले एप्लिकेशन पर निर्भर है) एक ही समय क्षेत्र लगातार या समय क्षेत्र (यानी एक अलग कॉलम में स्टोर) को समझने के लिए एक और योजना के साथ आते हैं।

उदाहरण के लिए:आपका स्थानीय समय क्षेत्र GMT+2 है। आप "2012-12-25 10:00:00 UTC" स्टोर करते हैं। डेटाबेस में संग्रहीत वास्तविक मूल्य "2012-12-25 12:00:00" है। आप इसे फिर से प्राप्त करते हैं:आप इसे "2012-12-25 10:00:00 UTC" के रूप में फिर से प्राप्त करते हैं (लेकिन केवल तभी जब आप इसे getTimestamp(..) का उपयोग करके पुनर्प्राप्त करते हैं। ), लेकिन जब कोई अन्य एप्लिकेशन समय क्षेत्र GMT+0 में डेटाबेस तक पहुँचता है, तो यह टाइमस्टैम्प को "2012-12-25 12:00:00 UTC" के रूप में पुनः प्राप्त करेगा।

यदि आप इसे किसी भिन्न समय क्षेत्र में संग्रहीत करना चाहते हैं, तो आपको setTimestamp(int parameterIndex, Timestamp x, Calendar cal) का उपयोग करने की आवश्यकता है। आवश्यक समय क्षेत्र में कैलेंडर उदाहरण के साथ। बस सुनिश्चित करें कि आप मूल्यों को पुनर्प्राप्त करते समय समान समय क्षेत्र के साथ समकक्ष गेटर का उपयोग करते हैं (यदि आप TIMESTAMP का उपयोग करते हैं आपके डेटाबेस में समय क्षेत्र की जानकारी के बिना)।

इसलिए, यह मानते हुए कि आप वास्तविक GMT समयक्षेत्र को संग्रहीत करना चाहते हैं, आपको इसका उपयोग करने की आवश्यकता है:

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
stmt.setTimestamp(11, tsSchedStartTime, cal);

JDBC 4.2 के साथ एक अनुपालक ड्राइवर को java.time.LocalDateTime का समर्थन करना चाहिए (और java.time.LocalTime ) TIMESTAMP . के लिए (और TIME ) get/set/updateObject . के माध्यम से . java.time.Local* कक्षाएं समय क्षेत्र के बिना हैं, इसलिए किसी भी रूपांतरण को लागू करने की आवश्यकता नहीं है (हालाँकि यह समस्याओं का एक नया सेट खोल सकता है यदि आपका कोड एक विशिष्ट समय क्षेत्र मानता है)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अशक्त मानों को प्रतिस्थापित करते हुए दो पंक्तियों को एक में मिलाना

  2. Oracle RAC VIP और ARP प्राइमर

  3. ओरेकल एसक्यूएल में सप्ताहांत और छुट्टियों को छोड़कर दिनांक अंतर के लिए कस्टम फ़ंक्शन बनाएं

  4. Oracle sql में दिनांक कार्यों के साथ कैसे काम करें?

  5. ओरेकल डेटटाइम कहां क्लॉज में?