1. तारीख वेळ API सादर करत आहे

तारीख वेळ API सादर करत आहे

जावाच्या निर्मात्यांना तारीख आणि कॅलेंडर वर्गांची परिस्थिती आवडली नाही. ते त्यांच्या दिवसात चांगले होते, परंतु काळ बदलतो. आणि काहीतरी सोपे, शक्तिशाली आणि विश्वासार्ह आवश्यक झाले. Calendarआणि Java 8 ( दिसल्यानंतर 15 वर्षांनी) च्या रिलीझसह , Java Date Time API सादर करण्यात आला. हा वर्गांचा एक संच आहे जो वेळेशी संबंधित प्रत्येक संभाव्य कार्य सोडविण्यास सक्षम असावा.

असे बरेच वर्ग होते की ते अनेक पॅकेजेसमध्ये विभागले गेले होते:

पॅकेज java.timeहे Java Date Time API साठी बेस पॅकेज आहे: त्यात LocalDate, LocalTime, LocalDateTime, Instant, Period, आणि सारखे वर्ग आहेत Duration. या वर्गातील सर्व वस्तू immutable, म्हणजे निर्मितीनंतर बदलल्या जाऊ शकत नाहीत.

पॅकेजमध्ये 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 today = LocalDate.now();
System.out.println("Today = " + today);

Today = 2019-02-22

विशिष्ट टाइम झोनमध्ये तारीख मिळवणे

वर्गामध्ये LocalDateपद्धतीची भिन्नता देखील आहे now(ZoneId)जी तुम्हाला विशिष्ट टाइम झोनमध्ये वर्तमान तारीख मिळवू देते.

हे करण्यासाठी, आम्हाला दुसरा वर्ग आवश्यक आहे - ZoneIdवर्ग (java.time.ZoneId). यात एक of()पद्धत आहे जी ZoneIdटाइम झोनचे नाव देऊन ऑब्जेक्ट परत करते.

शांघायमधील वर्तमान तारीख निश्चित करण्यासाठी, तुम्हाला खालील कोड लिहावा लागेल:

कोड कन्सोल आउटपुट
ZoneId  timezone = ZoneId.of("Asia/Shanghai");
LocalDate today = LocalDate.now(timezone);
System.out.println("In Shanghai, now = " + today);


In Shanghai, now = 2019-02-22

तुम्ही इंटरनेटवर सर्व टाइम झोनच्या नावांची यादी शोधू शकता.


3. विशिष्ट तारीख मिळवणे

विशिष्ट तारखेचे प्रतिनिधित्व करणारी ऑब्जेक्ट मिळविण्यासाठी LocalDate, आपल्याला स्थिर पद्धत वापरण्याची आवश्यकता आहे of(). येथे सर्व काही अगदी सोपे आणि स्पष्ट आहे:

LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);

व्हेरिएबल कुठे dateआहे LocalDateआणि क्लासच्या स्टॅटिक पद्धतीला कॉल आहे .LocalDate.of()of()LocalDate

येथे आपण FEBRUARYवर्गाचा स्थिरांक Month(java.time.Month) फेब्रुवारी महिना म्हणून निर्दिष्ट करण्यासाठी वापरला जात असल्याचे पाहतो.

तुम्ही जुन्या पद्धतीनुसार महिना देखील निर्दिष्ट करू शकता — संख्या वापरून:

LocalDate date = LocalDate.of(2019, 2, 22);

दोन? फेब्रुवारीऐवजी? याचा अर्थ महिना पुन्हा एकदा एकावरून मोजला जात आहे का?

होय, जावाच्या निर्मितीनंतर सुमारे 20 वर्षांनंतर, महिन्यांची संख्या शून्यातून मोजणे बंद झाले आहे.

उदाहरण:

कोड कन्सोल आउटपुट
LocalDate today = LocalDate.of(2019, 2, 22);
System.out.println("Today = " + today);

Today = 2019-02-22

दिवसाच्या निर्देशांकानुसार तारीख मिळवणे

तारीख तयार करण्याचा आणखी एक मनोरंजक मार्ग आहे: या ofYearDayपद्धतीचा वापर करून, तुम्ही फक्त वर्षाच्या संख्येवर आणि वर्षातील दिवसाच्या निर्देशांकावर आधारित तारीख मिळवू शकता. येथे सामान्य देखावा आहे:

LocalDate date = LocalDate.ofYearDay(year, day);

yearवर्षाची संख्या कुठे आहे आणि dayवर्षातील दिवसाची अनुक्रमणिका आहे.

उदाहरण:

कोड कन्सोल आउटपुट
LocalDate today = LocalDate.ofYearDay(2019, 100);
System.out.println("Today = " + today);

Today = 2019-04-10

2019 चा 100 वा दिवस 10 एप्रिल आहे.

युनिक्सची तारीख मिळवत आहे

Date1 जानेवारी 1970 पासून वस्तू नेहमी मिलिसेकंदांच्या संख्येत वेळ संग्रहित करतात हे तुम्हाला आठवते का ? प्रोग्रामर चांगले जुने दिवस गमावणार नाहीत याची खात्री करण्यासाठी, LocalDateवर्गाला एक ofEpochDay()पद्धत मिळाली, जी 1 जानेवारी 1970 पासून गणना केलेली तारीख परत करते. येथे सामान्य स्वरूप आहे:

LocalDate date = LocalDate.ofEpochDay(day);

day1 जानेवारी 1970 पासून गेलेल्या दिवसांची संख्या कुठे आहे.

उदाहरण:

कोड कन्सोल आउटपुट
LocalDate today = LocalDate.ofEpochDay(1);
System.out.println("Today = " + today);

Today = 1970-01-02

4. तारखेचे घटक मिळवणे

वस्तू बदलणे अशक्य आहे LocalDate, परंतु आपण संग्रहित तारखेचे वैयक्तिक घटक मिळवू शकता. LocalDateऑब्जेक्ट्समध्ये यासाठी अनेक पद्धती आहेत:

पद्धत वर्णन
int getYear()
विशिष्ट तारखेचे वर्ष मिळवते
Month getMonth()
तारखेचा महिना मिळवते: अनेक स्थिरांकांपैकी एक
JANUARY, FEBRUARY, ...;
int getMonthValue()
तारखेच्या महिन्याची अनुक्रमणिका मिळवते. जानेवारी == १.
int getDayOfMonth()
महिन्याच्या दिवसाची अनुक्रमणिका मिळवते
int getDayOfYear()
वर्षाच्या सुरुवातीपासून दिवसाची अनुक्रमणिका मिळवते
DayOfWeek getDayOfWeek()
आठवड्याचा दिवस परत करतो: अनेक स्थिरांकांपैकी एक
MONDAY, TUESDAY, ...;
IsoEra getEra()
युग परत करते: एकतर BCE(वर्तमान युगापूर्वी) आणि CE(वर्तमान युग)

उदाहरण:

कोड कन्सोल आउटपुट
LocalDate today = LocalDate.now();
System.out.println(today.getYear());
System.out.println(today.getMonth());
System.out.println(today.getMonthValue());
System.out.println(today.getDayOfMonth());
System.out.println(today.getDayOfWeek());

2019
FEBRUARY
2
22
FRIDAY

LocalDate5. ऑब्जेक्टमधील तारीख बदलणे

वर्गामध्ये LocalDateअनेक पद्धती आहेत ज्या तुम्हाला तारखांसह कार्य करू देतात. या पद्धतींची अंमलबजावणी वर्गाच्या पद्धतींशी एकरूप आहे String: ते विद्यमान ऑब्जेक्ट बदलत नाहीत LocalDate, परंतु त्याऐवजी इच्छित डेटासह एक नवीन परत करतात.

येथे वर्गाच्या पद्धती आहेत LocalDate:

पद्धत वर्णन
plusDays(int days)
तारखेला निर्दिष्ट दिवसांची संख्या जोडते
plusWeeks(int weeks)
तारखेला आठवडे जोडते
plusMonths(int months)
तारखेला महिने जोडतो
plusYears(int years)
तारखेला वर्षे जोडते
minusDays(int days)
तारखेपासून दिवस वजा करते
minusWeeks(int weeks)
तारखेपासून आठवडे वजा करते
minusMonths(int months)
तारखेपासून महिने वजा करते
minusYears(int years)
तारखेपासून वर्षे वजा करते

उदाहरण:

कोड कन्सोल आउटपुट
LocalDate birthday = LocalDate.of(2019, 2, 28);
LocalDate nextBirthday = birthday.plusYears(1);
LocalDate firstBirthday = birthday.minusYears(30);

System.out.println(birthday);
System.out.println(nextBirthday);
System.out.println(firstBirthday);




2019-02-28
2020-02-28
1989-02-28

ज्याच्या birthday objectपद्धती आपण म्हणतो त्या बदलत नाहीत. त्याऐवजी, त्याच्या पद्धती नवीन ऑब्जेक्ट्स परत करतात ज्यात इच्छित डेटा असतो.