tl;डॉ
myPreparedStatement
.setObject(
… , // Specify which placeholder `?` in your SQL statement.
OffsetDateTime.now( ZoneOffset.UTC ) // Capture the current moment as seen in the wall-clock time of UTC (an offset-from-UTC of zero).
) ;
लीगेसी डेट-टाइम क्लासेस से बचें
आप भयानक दिनांक-समय कक्षाओं का उपयोग कर रहे हैं जिन्हें java.time द्वारा वर्षों पहले हटा दिया गया था कक्षाएं।
कभी भी Date
का उपयोग न करें या Timestamp
.
यूटीसी
यूटीसी में वर्तमान क्षण को कैप्चर करें। अधिकांश डेटाबेस यूटीसी में एक पल स्टोर करते हैं। और आम तौर पर आपको अपने अधिकांश व्यावसायिक तर्क, डिबगिंग, लॉगिंग, भंडारण, और डेटा विनिमय UTC में करना चाहिए।
OffsetDateTime
उपयुक्त रूप से नामित OffsetDateTime
का उपयोग करके ऑफ़सेट-से-UTC के साथ एक क्षण का प्रतिनिधित्व करें कक्षा।
हम यूटीसी ही चाहते हैं, या शून्य की ऑफसेट। हम उसके लिए एक स्थिरांक का उपयोग कर सकते हैं, ZoneOffset.UTC
.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ) ;
JDBC 4.2
JDBC 4.2 के अनुसार हम सीधे java.time . का आदान-प्रदान कर सकते हैं डेटाबेस के साथ ऑब्जेक्ट।
इस पल को SQL- मानक TIMESTAMP WITH TIME ZONE
के समान डेटा प्रकार के कॉलम में सहेजने के लिए :
myPreparedStatement.setObject( … , odt ) ;
पुनर्प्राप्ति:
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
ZonedDateTime
इस पुनर्प्राप्त क्षण को उपयोगकर्ता के सामने प्रस्तुत करने के लिए, आप उपयोगकर्ता के अपेक्षित/वांछित समय क्षेत्र में समायोजित करना चाह सकते हैं।
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
कभी भी डिफ़ॉल्ट समय क्षेत्र पर भरोसा न करें
उपरोक्त कोड में ध्यान दें कि हमने हमेशा वांछित/अपेक्षित ऑफ़सेट या ज़ोन निर्दिष्ट किया है।
यदि आप निर्दिष्ट नहीं करते हैं, तो कोई ऑफ़सेट या ज़ोन चुपचाप परोक्ष रूप से लागू होता है। अपने इरादों को स्पष्ट रूप से निर्दिष्ट करने के लिए बेहतर है क्योंकि आपके जेवीएम, डेटाबेस और होस्ट ओएस के वर्तमान डिफ़ॉल्ट प्रोग्रामर के रूप में आपके हाथ से बाहर हैं। जिसका अर्थ है कि डिफ़ॉल्ट पर निर्भर कोड रनटाइम पर व्यवहार में भिन्न होगा।
जावा 6 और 7
वही आदमी, स्टीफन कोलबोर्न, जो JSR 310 और java.time का नेतृत्व करते हैं कार्यान्वयन, साथ ही प्रसिद्ध जोडा-टाइम प्रोजेक्ट, एक अन्य प्रोजेक्ट का भी नेतृत्व करता है, ThreeTen-Backport . अधिकांश java.time लगभग समान API के साथ, इस लाइब्रेरी में कार्यक्षमता को Java 6 और 7 में बैक-पोर्ट किया गया है।
इसलिए अपना सारा काम बैक-पोर्ट क्लासेस में करें। फिर, अंतिम क्षण में, java.sql.Timestamp
. से/में कनवर्ट करें DateTimeUtils
के ज़रिए
कक्षा।
वे रूपांतरण विधियां अधिकतर Instant
. का उपयोग करती हैं वस्तुओं। एक Instant
यूटीसी में एक पल है, हमेशा यूटीसी में। आप अपने OffsetDateTime
. से एडजस्ट कर सकते हैं एक Instant
. निकाल कर UTC को . Instant
क्लास java.time . में बुनियादी बिल्डिंग-ब्लॉक क्लास है , OffsetDateDate
. के साथ एक स्ट्रिंग उत्पन्न करते समय वैकल्पिक स्वरूपण पैटर्न जैसे अधिक लचीलापन होना। लेकिन दोनों Instant
और OffsetDateTime
समयरेखा पर एक क्षण, एक बिंदु का प्रतिनिधित्व करते हैं।
Instant instant = odt.toInstant() ;
java.sql.Timestamp ts = org.threeten.bp.DateTimeUtils.toSqlTimestamp( instant ) ;
दूसरी दिशा में जा रहे हैं, एक Timestamp
प्राप्त कर रहे हैं अपने डेटाबेस से, फिर तुरंत एक Instant
. में कनवर्ट करना .
java.sql.Timestamp ts = myResultSet.getTimestamp( … ) ;
Instant instant = org.threeten.bp.DateTimeUtils.toInstant( ts ) ;
के बारे में java.time
java.time उन्हें>
फ्रेमवर्क जावा 8 और बाद में बनाया गया है। ये कक्षाएं पुराने विरासत
की जगह लेती हैं दिनांक-समय की कक्षाएं जैसे java.util.Date
, Calendar
, और SimpleDateFormat
।
जोडा-टाइम प्रोजेक्ट, अब रखरखाव मोड में , java.time<में माइग्रेशन की सलाह देता है /ए> कक्षाएं।
अधिक जानने के लिए, Oracle Tutorial देखें . और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता है JSR 310 ।
आप java.time . का आदान-प्रदान कर सकते हैं अपने डेटाबेस के साथ सीधे वस्तुओं। JDBC ड्राइवर
का उपयोग करें JDBC 4.2
के अनुरूप या बाद में। स्ट्रिंग्स की कोई आवश्यकता नहीं है, java.sql.*
. की कोई आवश्यकता नहीं है कक्षाएं।
java.time कक्षाएं कहाँ से प्राप्त करें?
- जावा एसई 8
, Java SE 9
, Java SE 10
, Java SE 11
, और बाद में - बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
- Java 9 में कुछ छोटी सुविधाएँ और सुधार शामिल हैं।
- जावा एसई 6
और Java SE 7
- अधिकांश java.time कार्यक्षमता को ThreeTen-Backport में Java 6 और 7 में बैक-पोर्ट किया गया है ।
- एंड्रॉयड
- java.time . के Android बंडल कार्यान्वयन के बाद के संस्करण कक्षाएं।
- पहले वाले Android (<26) के लिए, ThreeTenABP परियोजना अनुकूलन ThreeTen-Backport (उपर्युक्त)। देखें ThreeTenABP का उपयोग कैसे करें… ।
ThreeTen-Extra
परियोजना अतिरिक्त कक्षाओं के साथ java.time का विस्तार करती है। यह परियोजना java.time में संभावित भावी परिवर्धन के लिए एक सिद्ध आधार है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval
, YearWeek
, YearQuarter
, और अधिक
।