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किसी वस्तु को a में बदलने के लिए आप इस तरह के कोड का उपयोग कर सकते हैं 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. किसी तिथि के रोलिंग तत्व

लेकिन कभी-कभी ऐसी परिस्थितियां होती हैं जब हम यह स्मार्ट व्यवहार नहीं चाहते हैं, उदाहरण के लिए आप बाकी सब कुछ बदले बिना तारीख के एक हिस्से में कुछ करना चाहते हैं।

इसके लिए क्लास के पास खास तरीका है Calendarroll()इसका सिग्नेचर बिल्कुल मेथड की तरह है 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

हमने महीना बदल दिया, लेकिन साल और तारीख नहीं बदली।