java.time
आधुनिक दृष्टिकोण जावा.टाइम कक्षाओं का उपयोग करता है जो जावा के शुरुआती संस्करणों के साथ बंडल किए गए परेशान विरासत तिथि-समय वर्गों को दबा देता है ।
java.sql.Timestamp
वर्ग उन विरासत वर्गों में से एक है। अब जरूरत नहीं। इसके बजाय Instant
सीधे JDBC 4.2 और बाद में अपने डेटाबेस के साथ java.time कक्षाओं का उपयोग करें।
Instant
कक्षा में समय रेखा पर एक पल का प्रतिनिधित्व करता यूटीसी के एक संकल्प के साथ नैनोसेकंड (नौ (9) एक दशमलव भिन्न के अंकों के लिए)।
Instant instant = myResultSet.getObject( … , Instant.class ) ;
यदि आपको किसी मौजूदा के साथ Timestamp
हस्तक्षेप करना है, तो पुराने वर्गों में जोड़े गए नए रूपांतरण विधियों के माध्यम से तुरंत java.time में परिवर्तित करें।
Instant instant = myTimestamp.toInstant() ;
किसी अन्य समय क्षेत्र में समायोजित करने के लिए, समय क्षेत्र को एक ZoneId
वस्तु के रूप में निर्दिष्ट करें । के रूप में , या , के प्रारूप में एक उचित समय क्षेत्र नाम निर्दिष्ट करें । कभी इस तरह के रूप में 3-4 पत्र छद्म ज़ोन का उपयोग या के रूप में वे कर रहे हैं नहीं सच समय क्षेत्र, नहीं मानकीकृत, और यहां तक कि अद्वितीय नहीं (!)।continent/region
America/Montreal
Africa/Casablanca
Pacific/Auckland
EST
IST
ZoneId z = ZoneId.of( "America/Montreal" ) ;
Instant
एक ZonedDateTime
वस्तु का उत्पादन करने के लिए लागू करें ।
ZonedDateTime zdt = instant.atZone( z ) ;
उपयोगकर्ता को प्रदर्शन के लिए एक स्ट्रिंग उत्पन्न करने के लिए, DateTimeFormatter
कई चर्चाओं और उदाहरणों को खोजने के लिए स्टैक ओवरफ्लो खोजें।
आपका प्रश्न वास्तव में दूसरी दिशा में जाने के बारे में है, उपयोगकर्ता डेटा-प्रविष्टि से लेकर तिथि-समय की वस्तुओं तक। आम तौर पर अपने डेटा-एंट्री को दो भागों में तोड़ने के लिए सबसे अच्छा है, एक तारीख और एक दिन का समय।
LocalDate ld = LocalDate.parse( dateInput , DateTimeFormatter.ofPattern( "M/d/uuuu" , Locale.US ) ) ;
LocalTime lt = LocalTime.parse( timeInput , DateTimeFormatter.ofPattern( "H:m a" , Locale.US ) ) ;
आपका प्रश्न स्पष्ट नहीं है। क्या आप UTC में होने के लिए उपयोगकर्ता द्वारा दर्ज की गई तारीख और समय की व्याख्या करना चाहते हैं? या किसी अन्य समय क्षेत्र में?
यदि आपका मतलब UTC है, तो UTC के OffsetDateTime
लिए स्थिरांक का उपयोग करके ऑफसेट के साथ बनाएं ZoneOffset.UTC
।
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
यदि आपके पास एक और समय क्षेत्र है, तो समय क्षेत्र ऑब्जेक्ट के साथ गठबंधन करें, ए ZoneId
। लेकिन कौन सा समय क्षेत्र? आप एक डिफ़ॉल्ट समय क्षेत्र का पता लगा सकते हैं। या, यदि महत्वपूर्ण है, तो आपको उपयोगकर्ता के साथ उनके इरादे के बारे में निश्चित होने की पुष्टि करनी चाहिए।
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
यूटीसी में हमेशा एक सरल वस्तु प्राप्त करने के लिए परिभाषा के अनुसार, एक अर्क निकालें Instant
।
Instant instant = odt.toInstant() ;
... या ...
Instant instant = zdt.toInstant() ;
अपने डेटाबेस को भेजें।
myPreparedStatement.setObject( … , instant ) ;
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, औरSimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।