1. पेश है डेट टाइम एपीआई

जावा के रचनाकारों को दिनांक और कैलेंडर कक्षाओं की स्थिति पसंद नहीं आई। वे अपने दिन में अच्छे थे, लेकिन समय बदल जाता है। और कुछ सरल, शक्तिशाली और विश्वसनीय आवश्यक हो गया। Calendarऔर जावा 8 ( प्रकट होने के 15 साल बाद) की रिलीज के साथ , जावा डेट टाइम एपीआई पेश किया गया था। यह कक्षाओं का एक समूह है जो समय से निपटने वाले हर संभव कार्य को हल करने में सक्षम होना चाहिए।
इतने सारे वर्ग थे कि उन्हें कई संकुलों में विभाजित किया गया था:
पैकेज जावा दिनांक समय एपीआई के लिए आधार पैकेज है: इसमें , , , , और java.timeजैसे वर्ग शामिल हैं । इन वर्गों की सभी वस्तुएँ हैं , जिसका अर्थ है कि निर्माण के बाद उन्हें बदला नहीं जा सकता।LocalDateLocalTimeLocalDateTimeInstantPeriodDurationimmutable
पैकेज java.time.formatमें समय स्वरूपण के लिए कक्षाएं हैं, अर्थात समय (और दिनांक) को स्ट्रिंग्स में परिवर्तित करना और इसके विपरीत। उदाहरण के लिए, इसमें बहुमुखी DateTimeFormatterवर्ग शामिल है, जो SimpleDateFormatवर्ग को प्रतिस्थापित करता है।
पैकेज java.time.zoneमें समय क्षेत्र के साथ काम करने के लिए कक्षाएं शामिल हैं। TimeZoneइसमें और जैसे वर्ग शामिल हैं ZonedDateTime। यदि आप दुनिया के विभिन्न हिस्सों में स्थित ग्राहकों के लिए सर्वर कोड लिख रहे हैं, तो आपको वास्तव में इन कक्षाओं की आवश्यकता होगी।
2. LocalDateवर्ग
डेट टाइम एपीआई से पहली और सबसे उपयोगी क्लास जिसे हम देखेंगे वह LocalDateक्लास है। जैसा कि आप शायद इसके नाम से अनुमान लगा सकते हैं, इस वर्ग को तारीखों के साथ काम करने के लिए डिज़ाइन किया गया है।
इस वर्ग के ऑब्जेक्ट बनने के बाद नहीं बदलते हैं, अर्थात LocalDateवर्ग अपरिवर्तनीय है। लेकिन यह गुण वर्ग में सरलता और विश्वसनीयता जोड़ता है। खासकर यदि कई धागे (निष्पादन के धागे) एक ही समय में ऐसी वस्तु के साथ बातचीत कर रहे हों।
एक नई वस्तु बनाने के लिए LocalDate, आपको स्थैतिक विधियों में से एक का उपयोग करने की आवश्यकता है। यहाँ मुख्य की एक सूची है।
वर्तमान तिथि प्राप्त करना
वर्तमान तिथि प्राप्त करने के लिए, आपको स्थैतिक now()विधि का उपयोग करने की आवश्यकता है। यह जितना लगता है उससे कहीं ज्यादा आसान है:
LocalDate today = LocalDate.now();
कहाँ todayएक LocalDateचर है, और कक्षा की LocalDate.now()स्थिर now()विधि के लिए एक कॉल है।LocalDate
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
किसी विशिष्ट समय क्षेत्र में दिनांक प्राप्त करना
कक्षा में विधि LocalDateकी भिन्नता भी होती है now(ZoneId)जो आपको एक विशिष्ट समय क्षेत्र में वर्तमान तिथि प्राप्त करने देती है।
ऐसा करने के लिए, हमें एक अन्य वर्ग - ZoneIdवर्ग (java.time.ZoneId) की आवश्यकता है। इसकी एक of()विधि है जो ZoneIdसमय क्षेत्र के नाम पर दी गई वस्तु को लौटाती है।
शंघाई में वर्तमान तिथि निर्धारित करने के लिए, आपको निम्नलिखित कोड लिखने की आवश्यकता है:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
आप इंटरनेट पर सभी समय क्षेत्रों के नामों की सूची प्राप्त कर सकते हैं।
3. एक विशिष्ट तिथि प्राप्त करना
एक विशिष्ट तिथि का प्रतिनिधित्व करने वाली वस्तु प्राप्त करने के लिए LocalDate, आपको स्थैतिक of()विधि का उपयोग करने की आवश्यकता है। यहाँ सब कुछ बहुत सरल और स्पष्ट भी है:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
कहाँ dateएक LocalDateचर है, और कक्षा की स्थिर विधि के लिए एक कॉल है।LocalDate.of()of()LocalDate
यहां हम फरवरी को महीने के रूप में निर्दिष्ट करने के लिए उपयोग किए जा रहे वर्ग (java.time.Month) FEBRUARYके स्थिरांक को देखते हैं।Month
आप महीने को पुराने तरीके से भी निर्दिष्ट कर सकते हैं - एक संख्या का उपयोग करके:
LocalDate date = LocalDate.of(2019, 2, 22);
दो? फरवरी के बजाय? क्या इसका मतलब यह है कि महीनों को फिर से एक से गिना जा रहा है?
हां, जावा के निर्माण के लगभग 20 साल बाद, महीनों को शून्य से गिना जाना बंद हो गया है।
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
दिन के सूचकांक द्वारा एक तिथि प्राप्त करना
तिथि बनाने का एक और दिलचस्प तरीका है: ofYearDayविधि का उपयोग करके, आप केवल वर्ष की संख्या और वर्ष में दिन के सूचकांक के आधार पर तिथि प्राप्त कर सकते हैं। यहाँ सामान्य उपस्थिति है:
LocalDate date = LocalDate.ofYearDay(year, day);
जहां yearवर्ष की संख्या है और dayवर्ष में दिन का सूचकांक है।
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
10 अप्रैल 2019 का 100वां दिन है।
एक यूनिक्स तिथि प्राप्त करना
क्या आपको याद है कि Date1 जनवरी, 1970 से वस्तुओं ने हमेशा समय को मिलीसेकंड की संख्या के रूप में संग्रहीत किया है? यह सुनिश्चित करने के लिए कि प्रोग्रामर अच्छे पुराने दिनों को याद न करें, LocalDateकक्षा को एक ofEpochDay()विधि मिली, जो 1 जनवरी, 1970 से गणना की गई तारीख लौटाती है। यहाँ सामान्य स्वरूप है:
LocalDate date = LocalDate.ofEpochDay(day);
1 जनवरी 1970 के बाद से अब तक कितने dayदिन बीत चुके हैं।
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
4. किसी तिथि के तत्व प्राप्त करना
वस्तुओं को बदलना असंभव है LocalDate, लेकिन आप संग्रहीत तिथि के अलग-अलग तत्व प्राप्त कर सकते हैं। LocalDateइसके लिए वस्तुओं के कई तरीके हैं:
| तरीका | विवरण |
|---|---|
|
किसी खास तारीख का साल लौटाता है |
|
दिनांक का महीना लौटाता है: कई स्थिरांकों में से एकJANUARY, FEBRUARY, ...; |
|
तारीख के महीने का इंडेक्स लौटाता है. जनवरी == 1। |
|
महीने के दिन का सूचकांक लौटाता है |
|
वर्ष की शुरुआत से दिन का सूचकांक लौटाता है |
|
सप्ताह का दिन लौटाता है: कई स्थिरांकों में से एकMONDAY, TUESDAY, ...; |
|
युग देता है: या तो BCE(वर्तमान युग से पहले) और CE(वर्तमान युग) |
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
LocalDate5. किसी वस्तु में दिनांक बदलना
कक्षा LocalDateमें कई विधियाँ हैं जो आपको तिथियों के साथ काम करने देती हैं। इन विधियों का कार्यान्वयन Stringवर्ग के तरीकों के अनुरूप है: वे मौजूदा LocalDateवस्तु को नहीं बदलते हैं, बल्कि वांछित डेटा के साथ एक नया लौटाते हैं।
यहाँ वर्ग के तरीके हैं LocalDate:
| तरीका | विवरण |
|---|---|
|
दिनांक में निर्दिष्ट दिनों की संख्या जोड़ता है |
|
तिथि में सप्ताह जोड़ता है |
|
तारीख में महीने जोड़ता है |
|
तिथि में वर्ष जोड़ता है |
|
दिनांक से दिन घटाता है |
|
दिनांक से सप्ताह घटाता है |
|
तारीख से महीने घटाता है |
|
तिथि से वर्ष घटाता है |
उदाहरण:
| कोड | कंसोल आउटपुट |
|---|---|
|
|
हम जिन birthday objectतरीकों को कहते हैं, वे नहीं बदलते हैं। इसके बजाय, इसकी विधियाँ नई वस्तुओं को लौटाती हैं जिनमें वांछित डेटा होता है।
GO TO FULL VERSION