tl; डॉ
केवल आधुनिक java.time कक्षाओं का उपयोग करें । कभी इस तरह के रूप भयानक विरासत वर्गों का उपयोग SimpleDateFormat
, Date
या java.sql.Timestamp
।
ZonedDateTime // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now( // Capture the current moment.
ZoneId.of( "Africa/Tunis" ) // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST.
) // Returns a `ZonedDateTime` object.
.format( // Generate a `String` object containing text representing the value of our date-time object.
DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
) // Returns a `String`.
या JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र का उपयोग करें।
ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )
java.time और JDBC 4.2
आधुनिक दृष्टिकोण java.time कक्षाओं का उपयोग करता है जैसा कि ऊपर देखा गया है।
यदि आपका JDBC ड्राइवर JDBC 4.2 के साथ अनुपालन करता है , तो आप डेटाबेस के साथ java.time ऑब्जेक्ट को सीधे एक्सचेंज कर सकते हैं । का उपयोग करें PreparedStatement::setObject
और ResultSet::getObject
।
केवल JDBC 4.2 से पहले ड्राइवरों के लिए java.sql का उपयोग करें
यदि आपका JDBC ड्राइवर java.time प्रकारों के समर्थन के लिए JDBC 4.2 का अनुपालन नहीं करता है , तो आपको java.sql वर्गों का उपयोग करने के लिए वापस गिरना होगा।
आकड़ो का भंडारण किया जा रहा हैं।
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ; // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;
डाटा लिया जा रहा है।
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Java.sql प्रकार, जैसे java.sql.Timestamp
, का उपयोग केवल डेटाबेस के अंदर और बाहर हस्तांतरण के लिए किया जाना चाहिए। जावा 8 और बाद में java.time प्रकारों में तुरंत रूपांतरित करें।
java.time.Instant
यूटीसी में समय पर एक java.sql.Timestamp
नक्शे java.time.Instant
, एक पल। toInstant
पुराने वर्ग में जोड़े गए नए रूपांतरण विधि को नोट करें ।
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
समय क्षेत्र
ZoneId
एक पाने के लिए वांछित / अपेक्षित समय क्षेत्र ( ) लागू करें ZonedDateTime
।
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
स्वरूपित स्ट्रिंग्स
DateTimeFormatter
अपनी स्ट्रिंग उत्पन्न करने के लिए a का उपयोग करें । पैटर्न कोड समान हैं, java.text.SimpleDateFormat
लेकिन बिल्कुल नहीं, इसलिए डॉक्टर को ध्यान से पढ़ें।
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );
यह विशेष रूप से सटीक अर्थ के रूप में अस्पष्ट है क्योंकि इसमें ऑफसेट-यूटीसी या समय क्षेत्र के किसी भी संकेत का अभाव है ।
आईएसओ 8601
यदि आपके पास इस मामले में कोई भी बात है, तो मेरा सुझाव है कि आप स्वयं को रोल करने के बजाय मानक आईएसओ 8601 प्रारूपों का उपयोग करने पर विचार करें। मानक प्रारूप आपके लिए काफी समान है। उदाहरण के लिए
2016-02-20T03:26:32+05:30
:।
Java.time कक्षाएं डिफ़ॉल्ट रूप से इन मानक प्रारूपों का उपयोग करती हैं, इसलिए किसी पैटर्न को निर्दिष्ट करने की आवश्यकता नहीं है। ZonedDateTime
वर्ग समय क्षेत्र का नाम (एक बुद्धिमान सुधार) जोड़कर मानक प्रारूप फैली हुई है।
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Java.sql में परिवर्तित करें
आप java.time से वापस में परिवर्तित कर सकते हैं java.sql.Timestamp
। एक उद्धरण Instant
से ZonedDateTime
।
Java.time कक्षाओं को / से परिवर्तित करने की सुविधा के लिए पुरानी कक्षाओं में नए तरीके जोड़े गए हैं।
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।