1. வகுப்பிலிருந்து Dateவகுப்பிற்கு மாறுதல்Calendar

புரோகிராமர்கள் Dateஅதன் எளிமை மற்றும் Unix தரநிலைகளுக்கான ஆதரவிற்காக வகுப்பை விரும்பினர், ஆனால் உங்களுக்குத் தெரியும், ஒவ்வொரு ரோஜாவிற்கும் அதன் முட்கள் உள்ளன.

புரோகிராமர்கள் "ஸ்மார்ட்" வகுப்பை விரும்பினர் 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மாற்ற இது போன்ற குறியீட்டைப் பயன்படுத்தலாம் :CalendarDate

முறையைப் பயன்படுத்துதல் 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 இலிருந்து எண்ணப்பட்டது)
4வது நாள்
மணிநேரம்
நிமிடங்கள்
வினாடிகள்

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

நாங்கள் மாதத்தை மாற்றினோம், ஆனால் ஆண்டு மற்றும் தேதி மாறாமல் இருந்தது.