tl; डॉ
वर्तमान "सबसे अच्छा अभ्यास" के आसपास की सलाह Date
औरCalendar
यह सबसे अच्छा हमेशा के पक्ष में है Calendar
अधिकDate
इन विरासत वर्गों से पूरी तरह से बचें । इसके बजाय java.time कक्षाओं का उपयोग करें ।
- UTC में एक पल के लिए , का उपयोग करें (आधुनिक समकक्ष )
Instant
Date
- किसी विशेष समय क्षेत्र में एक पल के लिए , (आधुनिक समतुल्य ) का उपयोग करें
ZonedDateTime
GregorianCalendar
- एक विशेष ऑफसेट-यूटीसी में एक पल के लिए , उपयोग (विरासत वर्गों में कोई समकक्ष नहीं)
OffsetDateTime
- अज्ञात समय क्षेत्र या ऑफसेट के साथ दिनांक-समय (एक पल नहीं) के लिए, उपयोग (विरासत वर्गों में कोई समकक्ष नहीं)
LocalDateTime
विवरण
Ortomala द्वारा उत्तर Lokni आधुनिक उपयोग करने का सुझाव करने के लिए सही है java.time बल्कि परेशानी पुराने विरासत तिथि-समय वर्गों (से कक्षाएं Date
, Calendar
, आदि)। लेकिन वह उत्तर गलत वर्ग को समकक्ष बताता है (उस उत्तर पर मेरी टिप्पणी देखें)।
Java.time का उपयोग करना
Java.time कक्षाएं विरासत तिथि-समय की कक्षाओं, रात और दिन के अंतर पर एक बड़ा सुधार हैं। पुरानी कक्षाएं खराब तरीके से डिजाइन की गई हैं, भ्रामक और परेशानी भरी हैं। आपको जब भी संभव हो पुरानी कक्षाओं से बचना चाहिए। लेकिन जब आपको पुराने / नए से / में परिवर्तित करने की आवश्यकता होती है, तो आप पुराने वर्गों में नए तरीकों को जोड़कर ऐसा कर सकते हैं ।
रूपांतरण के बारे में अधिक जानकारी के लिए, मेरा उत्तर और निफ्टी आरेख किसी अन्य प्रश्न पर देखें, java.util में कनवर्ट करें। "java.time" प्रकार क्या है? ।
स्टैक ओवरफ्लो की खोज java.time का उपयोग करने पर कई सैकड़ों उदाहरण प्रश्न और उत्तर देता है। लेकिन यहाँ एक त्वरित सारांश है।
Instant
एक के साथ वर्तमान क्षण प्राप्त करें Instant
। Instant
कक्षा में समय रेखा पर एक पल का प्रतिनिधित्व करता यूटीसी के एक संकल्प के साथ नैनोसेकंड (नौ (9) एक दशमलव भिन्न के अंकों के लिए)।
Instant instant = Instant.now();
ZonedDateTime
किसी विशेष क्षेत्र की दीवार-घड़ी के समय के लेंस के माध्यम से एक ही समय में एक साथ देखने के लिए , एक समय क्षेत्र ( ) प्राप्त करने के लिए एक समय क्षेत्र लागू करें ।ZoneId
ZonedDateTime
समय क्षेत्र
के रूप में , या , के प्रारूप में एक उचित समय क्षेत्र नाम निर्दिष्ट करें । कभी इस तरह के रूप में 3-4 पत्र संक्षिप्त नाम का उपयोग या के रूप में वे कर रहे हैं नहीं सच समय क्षेत्र, नहीं मानकीकृत, और यहां तक कि अद्वितीय नहीं (!)।continent/region
America/Montreal
Africa/Casablanca
Pacific/Auckland
EST
IST
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone();
ओफ़्सेट
एक समय क्षेत्र अपने ऑफसेट-यूटीसी से परिवर्तनों का एक क्षेत्र है । लेकिन कभी-कभी आपको पूरे क्षेत्र के बिना केवल एक ऑफसेट दिया जाता है। उस स्थिति में, OffsetDateTime
कक्षा का उपयोग करें ।
ZoneOffset offset = ZoneOffset.parse( "+05:30" );
OffsetDateTime odt = instant.atOffset( offset );
एक समय क्षेत्र का उपयोग एक मात्र ऑफसेट के उपयोग से बेहतर है।
LocalDateTime
Local…
कक्षाओं में "स्थानीय" का अर्थ किसी भी इलाके से है, न कि किसी विशेष इलाके से। तो नाम प्रति-सहज हो सकता है।
LocalDateTime
, LocalDate
और LocalTime
ऑफसेट या टाइम ज़ोन के बारे में किसी भी जानकारी का अभाव है। इसलिए वे वास्तविक क्षणों का प्रतिनिधित्व नहीं करते हैं, वे समयरेखा पर अंक नहीं हैं । जब संदेह या असमंजस में हों, ZonedDateTime
बजाय इसके उपयोग करें LocalDateTime
। अधिक चर्चा के लिए स्टैक ओवरफ्लो खोजें।
स्ट्रिंग्स
तारीख-समय ऑब्जेक्ट्स को उन स्ट्रिंग्स के साथ भ्रमित न करें जो उनके मूल्य का प्रतिनिधित्व करते हैं। आप दिनांक-समय ऑब्जेक्ट प्राप्त करने के लिए एक स्ट्रिंग पार्स कर सकते हैं, और आप दिनांक-समय ऑब्जेक्ट से स्ट्रिंग उत्पन्न कर सकते हैं। लेकिन स्ट्रिंग कभी भी स्वयं दिनांक नहीं है।
Java.time कक्षाओं में डिफ़ॉल्ट रूप से उपयोग किए जाने वाले मानक आईएसओ 8601 प्रारूपों के बारे में जानें ।
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
JDBC 4.2 के साथ या बाद में JDBC ड्राइवर के अनुपालन का उपयोग करते हुए , आप सीधे java.time ऑब्जेक्ट्स को अपने डेटाबेस से एक्सचेंज कर सकते हैं । तार या जावा की जरूरत नहीं है। वर्ग *। कक्षाएं।
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।