1. वर्गातून वर्गात DateबदलणेCalendar

Dateप्रोग्रामरना वर्ग त्याच्या साधेपणामुळे आणि युनिक्स मानकांसाठी समर्थनासाठी आवडला , परंतु तुम्हाला माहिती आहे की, प्रत्येक गुलाबाला काटे असतात.

प्रोग्रामरना "स्मार्ट" Dateवर्ग हवा होता. आणि त्यांना पाहिजे ते वर्गाच्या रूपाने मिळाले Calendar. केवळ तारखा साठवण्याचाच नाही तर तारखांसह कठीण ऑपरेशन्स करण्याचा एक मार्ग म्हणून याची कल्पना केली गेली.

वर्गाचे पूर्ण नाव Calendarjava.util.Calendar आहे. तुम्ही तुमच्या कोडमध्ये ते वापरायचे ठरवल्यास ते आयात विधानामध्ये जोडण्यास विसरू नका.

आपण Calendarया आदेशासह ऑब्जेक्ट तयार करू शकता:

Calendar date = Calendar.getInstance();

getInstance()वर्गाची स्थिर पद्धत वर्तमान तारखेसह आरंभ केलेला ऑब्जेक्ट Calendarतयार करते . Calendarतुम्हाला हवे असलेले कॅलेंडर प्रोग्राम चालवणाऱ्या कॉम्प्युटरच्या सेटिंग्जच्या आधारे तयार केले जाईल.

किंवा अधिक अचूकपणे, तुम्हाला मिळणारे कॅलेंडर... कारण पृथ्वीवरील मानव हे एका कॅलेंडरपुरते मर्यादित नाहीत. त्याऐवजी, ते अनेक वापरतात. आणि त्यापैकी जवळजवळ प्रत्येकजण कोणत्या ना कोणत्या धर्माशी किंवा देशाशी संबंधित आहे. वर्ग Calendarत्यापैकी 3 चे समर्थन करतो:

कॅलेंडर वर्णन
ग्रेगोरियन कॅलेंडर ख्रिश्चन ग्रेगोरियन कॅलेंडर
बौद्ध कॅलेंडर बौद्ध दिनदर्शिका
जपानी इंपीरियल कॅलेंडर जपानी शाही कॅलेंडर

पण चीनी आणि अरबी कॅलेंडर देखील आहेत. मुळात, वेळेसोबत काम करणे वाटते तितके सोपे नाही.

चीनी कॅलेंडरमध्ये, हा धडा लिहिण्याच्या वेळी अधिकृतपणे वर्ष 4716 आहे. आणि मुस्लिम कॅलेंडरनुसार, वर्ष 1398 आहे. माझ्या प्रोग्रामर मित्रा, मोठ्या जगात आपले स्वागत आहे.

2. कॅलेंडर ऑब्जेक्ट तयार करणे

आम्ही ग्रेगोरियन कॅलेंडर वापरू, कारण ते जगातील सर्वात सामान्य आहे. किमान तोपर्यंत चीन ओरॅकल विकत घेत नाही आणि चिनी कॅलेंडर मुख्य बनवतो.

तुम्ही यासारखे विधान वापरून कोणत्याही तारखेसह कॅलेंडर ऑब्जेक्ट तयार करू शकता:

Calendar date = new GregorianCalendar(year, month, day);

GregorianCalendarहोय, प्रत्येक वेळी लिहावे लागेल . त्याऐवजी Calendar, तुम्ही देखील लिहू शकता GregorianCalendar— ते देखील कार्य करेल. पण लेखन फक्त Calendarलहान आहे.

वर्ष पूर्ण लिहिणे आवश्यक आहे, उदा. तुम्ही 2019 ऐवजी 19 लिहू शकत नाही. महिने अजूनही शून्यावरून अंकित आहेत. पण पूर्वीप्रमाणे महिन्याचे दिवस शून्यातून मोजले जात नाहीत. मूर्ख!

वेळ आणि तारीख सेट करण्यासाठी, तुम्हाला अतिरिक्त युक्तिवाद म्हणून वेळ पास करणे आवश्यक आहे:

... = new GregorianCalendar(year, month, day, hours, minutes, seconds);

गरज पडल्यास तुम्ही मिलिसेकंदातही पास करू शकता. ते सेकंदांच्या संख्येनंतरचे पॅरामीटर आहेत.

3. स्क्रीनवर कॅलेंडर ऑब्जेक्ट प्रदर्शित करणे

आपण स्क्रीनवर फक्त एक कॅलेंडर ऑब्जेक्ट मुद्रित केल्यास, आपण परिणामाने फारसे खूश होणार नाही.

कोड
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar);
कन्सोल आउटपुट
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Helsinki",offset=7200000,dstSavings=3600000,useDaylight=true,transitions=118,lastRule=java.util.SimpleTimeZone[id=Europe/Helsinki,offset=7200000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2019,MONTH=3,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=12,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]

येथे लक्षात ठेवण्यासारखी गोष्ट अशी आहे की कॅलेंडर एक कॅलेंडर आहे, तारीख नाही : त्यात सर्व प्रकारच्या सेटिंग्ज आहेत ज्या स्क्रीनवर प्रदर्शित केल्या जातील.

SimpleDateFormatकॅलेंडर प्रदर्शित करण्यासाठी एखादी वस्तू वापरणे योग्य असेल , परंतु आम्ही त्याचा अभ्यास करेपर्यंत तुम्ही ही लाईफ हॅक वापरू शकता.

Date date = calendar.getTime();

एखादे Calendarऑब्जेक्ट सहजपणे ऑब्जेक्टमध्ये रूपांतरित केले जाऊ शकते Dateआणि आपल्याला Dateऑब्जेक्ट कसे प्रदर्शित करायचे हे आधीच माहित आहे. Calendarऑब्जेक्टमध्ये रूपांतरित करण्यासाठी तुम्ही यासारखा कोड वापरू शकता Date:

पद्धत वापरणे getTime():

कोड कन्सोल आउटपुट
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar.getTime());
 Fri Apr 12 00:00:00 EEST 2019

ही एक वेगळी बाब आहे, नाही का?

4. तारखेच्या घटकांसह कार्य करणे

तारखेचा विशिष्ट घटक (उदा. वर्ष, महिना, ...) मिळवण्यासाठी वर्गाकडे पद्धत Calendarआहे get(). ही एकच पद्धत आहे, परंतु त्यात पॅरामीटर्स आहेत:

int month = calendar.get(Calendar.MONTH);

व्हेरिएबल कुठे calendarआहे Calendarआणि MONTHवर्गाचे स्थिर क्षेत्र आहे Calendar.

तुम्ही Calendarवर्गाच्या स्थिर फील्डपैकी एक पद्धत वितर्क म्हणून पास कराल getआणि परिणामी तुम्हाला इच्छित मूल्य मिळेल.

उदाहरणे

कोड वर्णन
Calendar calendar = Calendar.getInstance();

int era = calendar.get(Calendar.ERA);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);


युग (सामान्य युगाच्या आधी किंवा नंतर)
वर्ष
महिन्याचा
दिवस महिन्याचा

दिवस आठवड्याचा
तास
मिनिटे
सेकंद

तारखेचा घटक बदलण्यासाठी, setपद्धत वापरा:

calendar.set(Calendar.MONTH, value);

व्हेरिएबल कुठे calendarआहे Calendarआणि MONTHवर्गाचे स्थिर क्षेत्र आहे Calendar.

पद्धतीसह कार्य करताना set, तुम्ही Calendarवर्गाच्या स्थिर फील्डपैकी एक प्रथम वितर्क म्हणून आणि नवीन मूल्य दुसरा वितर्क म्हणून पास करता.

उदाहरणे

कोड वर्णन
Calendar calendar = new GregorianCalendar();

calendar.set(Calendar.YEAR, 2019);
calendar.set(Calendar.MONTH, 6);
calendar.set(Calendar.DAY_OF_MONTH, 4);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 0);

System.out.println(calendar.getTime());


वर्ष = 2019
महिना = जुलै (0 वरून क्रमांकित)
चौथा दिवस
तास
मिनिटे
सेकंद

5. वर्गाचे Calendarस्थिरांक

वर्गाची स्थिर फील्ड Calendarतारखेच्या घटकांना नामकरण करण्यासाठी मर्यादित नाहीत. प्रत्येक प्रसंगासाठी फील्ड असल्याचे दिसते.

Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);

उदाहरणार्थ, महिन्यांचा संदर्भ देण्यासाठी स्थिर फील्ड आहेत:

आणि आठवड्याचे दिवस देखील:

Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
   System.out.println("It's Friday");
}

आम्ही सर्वकाही सूचीबद्ध करणार नाही. तुम्हाला कोडमध्ये असे स्थिरांक दिसल्यास तुम्ही आश्चर्यचकित व्हावे अशी आमची इच्छा नाही.

स्थिरांक वापरल्याने कोड अधिक वाचनीय होतो, म्हणूनच प्रोग्रामर त्यांचा वापर करतात. आणि वाचनीयता सुधारण्यासाठी महिन्यांची संख्या शून्यातून देखील केली जाते. किंवा नाही.

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

वर्गात Calendarएक पद्धत आहे जी तुम्हाला तारखेला अधिक बुद्धिमान मार्गांनी कार्य करू देते. उदाहरणार्थ, तुम्ही तारखेला एक वर्ष, महिना किंवा अनेक दिवस जोडू शकता. किंवा त्यांना घेऊन जा. या पद्धतीला म्हणतात add(). त्याच्यासह कार्य करणे असे दिसते:

calendar.add(Calendar.MONTH, value);

व्हेरिएबल कुठे calendarआहे Calendarआणि MONTHवर्गाचे स्थिर क्षेत्र आहे Calendar.

पद्धतीसह कार्य करताना add, तुम्ही Calendarवर्गाच्या स्थिर फील्डपैकी एक प्रथम वितर्क म्हणून पास कराल आणि दुसरा वितर्क म्हणून — जोडले जाणारे नवीन मूल्य.

ही आणखी एक बुद्धिमान पद्धत आहे. चला ते किती स्मार्ट आहे ते पाहूया:

कोड
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.DAY_OF_MONTH, 2);
System.out.println(calendar.getTime());
कन्सोल आउटपुट
Fri Mar 01 00:00:00 EET 2019

ही पद्धत समजते की फेब्रुवारी 2019 मध्ये फक्त 28 दिवस आहेत, त्यामुळे परिणामी तारीख 1 मार्च आहे.

आता 2 महिने काढूया! आम्हाला काय मिळाले पाहिजे? 27 डिसेंबर 2018! चला आता तपासूया.

पूर्वीच्या तारखेला परिणाम देणारे ऑपरेशन करण्यासाठी, तुम्हाला या add()पद्धतीमध्ये नकारात्मक मूल्य पास करणे आवश्यक आहे:

कोड
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
कन्सोल आउटपुट
Thu Dec 27 00:00:00 EET 2018

ते कार्य करते!

ही पद्धत महिने आणि लीप वर्षांची भिन्न लांबी दर्शवते. एकूणच, एक उत्तम पद्धत. तारखांसह काम करणार्‍या बहुतेक प्रोग्रामरना याचीच आवश्यकता असते.

7. तारखेचे रोलिंग घटक

परंतु कधीकधी अशी परिस्थिती असते जेव्हा आम्हाला हे स्मार्ट वर्तन नको असते, उदा. तुम्हाला सर्व काही न बदलता तारखेच्या एका भागासाठी काहीतरी करायचे आहे.

यासाठी वर्गाची खास पद्धत आहे Calendar. roll()त्याची स्वाक्षरी पद्धतीप्रमाणेच आहे add(), परंतु ही पद्धत तारखेचा फक्त एक घटक बदलते, बाकीचे अपरिवर्तित ठेवते.

उदाहरण:

कोड
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.roll(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
कन्सोल आउटपुट
Fri Dec 27 00:00:00 EET 2019

आम्ही महिना बदलला, पण वर्ष आणि तारीख तशीच राहिली.