1. ZonedDateTimeவர்க்கம்

தேதி நேர API இல் மற்றொரு சுவாரஸ்யமான வகுப்பு உள்ளது: ZonedDateTimeவகுப்பு. அதன் முக்கிய நோக்கம் வெவ்வேறு நேர மண்டலங்களில் தேதிகளுடன் வேலை செய்ய வசதியாக உள்ளது.

LocalDateதேதிகளைக் குறிப்பிடுவதற்கு சிறந்தது. உதாரணமாக, பிறந்தநாள். நான் எங்கிருந்தாலும் மார்ச் 15 என் பிறந்தநாள். இது ஒரு தேதியின் உதாரணம்.

LocalTimeஅலாரம் கடிகாரத்தில் அமைக்கப்பட்டுள்ள நேரத்தைப் போல, நேரத்தை விவரிப்பது சிறந்தது: நான் காலை 5:00 மணிக்கு அலாரத்தை அமைத்தேன், நான் எங்கு இருக்கிறேன் என்பது முக்கியமில்லை. 5:00 காலை 5:00 மணி. நேரத்துடன் வேலை செய்வதற்கு இது ஒரு எடுத்துக்காட்டு.

இப்போது விமானங்களை முன்பதிவு செய்யும் விண்ணப்பத்தை எழுதுகிறோம் என்று வைத்துக்கொள்வோம். உள்ளூர் நேரத்தின் அடிப்படையில் விமானங்கள் புறப்பட்டு வந்து சேரும். விமானம் ஒரு குறிப்பிட்ட நேரத்திற்கு காற்றில் உள்ளது, ஆனால் நேர மண்டலங்கள் மாறலாம்.

நேர மண்டலங்கள்

மூலம், நேர மண்டலங்கள் ஒரு உண்மையான குழப்பம். 24 நேர மண்டலங்கள் உள்ளன என்று நீங்கள் நினைத்தால், நீங்கள் மிகவும் தவறாக நினைக்கிறீர்கள்.

எடுத்துக்காட்டாக, இந்தியாவில் உள்ள நேரம் கிரீன்விச் நேரத்திலிருந்து ஐந்தரை மணிநேரம் வேறுபடுகிறது: GMT+5:30. சில நாடுகள் பகல் சேமிப்பு நேரத்திற்கு மாறுகின்றன, மற்றவை இல்லை. மேலும் என்னவென்றால், வெவ்வேறு நாடுகள் வருடத்தின் வெவ்வேறு நேரங்களில் கோடை காலத்திற்கு மாறுகின்றன.

மேலும் சில நாடுகள் பகல் சேமிப்பு நேரத்தை ரத்து செய்யும் சட்டங்களை இயற்றுகின்றன, அல்லது அதை மீண்டும் அறிமுகப்படுத்துகின்றன அல்லது மீண்டும் ரத்து செய்கின்றன.

எந்தவொரு நிகழ்விலும், உலகில் நேர மண்டலங்கள் உள்ளன, மேலும் ஒவ்வொரு நேர மண்டலத்திலும் ஒரு நேரம் உள்ளது. வெவ்வேறு மண்டலங்களில் உள்ள நேரம் ஆண்டின் சில காலகட்டங்களில் ஒத்துப்போகலாம், பின்னர் மற்ற காலங்களில் வேறுபடலாம். நேர மண்டலங்கள் பொதுவாக அவற்றில் அமைந்துள்ள முக்கிய நகரங்களின் பெயரிடப்படுகின்றன: Europe/Monaco, Asia/Singapore, ஆனால் விதிவிலக்குகளும் உள்ளன - US/Pacific.

அதிகாரப்பூர்வமாக, தற்போது 599 நேர மண்டலங்கள் உள்ளன. இதைப் பற்றி யோசியுங்கள்: 599. அது 24 லிருந்து வெகு தொலைவில் உள்ளது. உலகளாவிய உலகிற்கு வரவேற்கிறோம்.

ZoneIdஜாவாவில் நேர மண்டலத்தைச் சேமிக்க, தொகுப்பிலிருந்து வரும் வகுப்பு பயன்படுத்தப்படுகிறது java.time.

மூலம், இது ஒரு நிலையான getAvailableZoneIds()முறையைக் கொண்டுள்ளது, இது தற்போது அறியப்பட்ட அனைத்து நேர மண்டலங்களின் தொகுப்பையும் வழங்குகிறது. அனைத்து மண்டலங்களின் பட்டியலைப் பெற, நீங்கள் பின்வரும் குறியீட்டை எழுத வேண்டும்:

குறியீடு கன்சோல் வெளியீடு (பகுதி)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

ZoneIdஒரு பொருளை அதன் பெயரால் பெற , நீங்கள் நிலையான of()முறையைப் பயன்படுத்த வேண்டும்;

குறியீடு குறிப்பு
ZoneId zone = ZoneId.of("Africa/Cairo");
Cairo


2. ஒரு ZonedDateTimeபொருளை உருவாக்குதல்

ஒரு பொருளை உருவாக்கும் போது ZonedDateTime, ​​நீங்கள் வகுப்பின் நிலையான now()முறையை அழைக்க வேண்டும் மற்றும் ZoneIdஅதற்கு ஒரு பொருளை அனுப்ப வேண்டும்.

குறியீடு கன்சோல் வெளியீடு
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime time = ZonedDateTime.now(zone);
System.out.println(time);


2019-02-22T11:37:58.074816+02:00[Africa/Cairo]

ZoneIdநீங்கள் ஒரு பொருளை முறைக்கு அனுப்பவில்லை என்றால் now()(அது அனுமதிக்கப்படுகிறது), பின்னர் நிரலை இயக்கும் கணினியின் அமைப்புகளின் அடிப்படையில் நேர மண்டலம் தானாகவே தீர்மானிக்கப்படும்.

உதாரணமாக:

குறியீடு கன்சோல் வெளியீடு
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

2019-02-22T13:39:05.70842+02:00[Europe/Helsinki]

உலகளாவிய தேதியை உள்ளூர் தேதியாக மாற்றுகிறது

ZonedDateTimeஉள்ளூர் தேதி மற்றும் நேரத்திற்கு மாற்றும் திறன் இதன் சுவாரஸ்யமான அம்சங்களில் ஒன்றாகும் . உதாரணமாக:

ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);

LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();

3. நேரத்துடன் வேலை செய்தல்

வகுப்பைப் போலவே LocalDateTime, ZonedDateTimeவகுப்பிலும் தேதி மற்றும் நேரத்தின் தனிப்பட்ட கூறுகளைப் பெற பல வழிகள் உள்ளன. இந்த முறைகளின் பட்டியல் இங்கே:

int getYear()
ஒரு குறிப்பிட்ட தேதியின் ஆண்டை வழங்குகிறது
Month getMonth()
தேதியின் மாதத்தை வழங்குகிறது: பல மாறிலிகளில் ஒன்று —JANUARY, FEBRUARY, ...;
int getMonthValue()
தேதி மாதத்தின் குறியீட்டை வழங்குகிறது. ஜனவரி == 1
int getDayOfMonth()
மாதத்தின் நாளின் குறியீட்டை வழங்கும்
DayOfWeek getDayOfWeek()
வாரத்தின் நாளை வழங்கும்: பல மாறிலிகளில் ஒன்று —MONDAY, TUESDAY, ...;
int getDayOfYear()
ஆண்டின் நாளின் குறியீட்டை வழங்குகிறது
int getHour()
மணிநேரத்தைத் திருப்பித் தருகிறது
int getMinute()
நிமிடங்களைத் திருப்பித் தருகிறது
int getSecond()
வினாடிகளைத் திருப்பித் தருகிறது
int getNano()
நானோ விநாடிகளைத் திருப்பித் தருகிறது

அனைத்து முறைகளும் வகுப்பின் முறைகளுக்கு முற்றிலும் ஒத்தவை LocalDateTime. மற்றும், நிச்சயமாக, ZonedDateTimeவகுப்பில் தேதிகள் மற்றும் நேரங்களுடன் வேலை செய்ய அனுமதிக்கும் முறைகள் உள்ளன. முறைகள் அழைக்கப்படும் பொருள் மாறாது என்று கூறினார். அதற்கு பதிலாக, அவர்கள் ஒரு புதிய ZonedDateTimeபொருளைத் திருப்பித் தருகிறார்கள்:

முறைகள் விளக்கம்
plusYears(int)
தேதியுடன் ஆண்டுகளைச் சேர்க்கிறது
plusMonths(int)
தேதியுடன் மாதங்களைச் சேர்க்கிறது
plusDays(int)
தேதியுடன் நாட்களைச் சேர்க்கிறது
plusHours(int)
மணிநேரம் சேர்க்கிறது
plusMinutes(int)
நிமிடங்கள் சேர்க்கிறது
plusSeconds(int)
வினாடிகளைச் சேர்க்கிறது
plusNanos(int)
நானோ விநாடிகளைச் சேர்க்கிறது
minusYears(int)
தேதியிலிருந்து ஆண்டுகளைக் கழிக்கிறது
minusMonths(int)
தேதியிலிருந்து மாதங்களைக் கழிக்கிறது
minusDays(int)
தேதியிலிருந்து நாட்களைக் கழிக்கிறது
minusHours(int)
மணிநேரத்தை கழிக்கிறது
minusMinutes(int)
நிமிடங்களைக் கழிக்கிறது
minusSeconds(int)
வினாடிகளைக் கழிக்கிறது
minusNanos(int)
நானோ வினாடிகளைக் கழிக்கிறது

நாங்கள் எந்த எடுத்துக்காட்டுகளையும் வழங்க மாட்டோம், ஏனெனில் நாங்கள் இப்போது கருதிய வகுப்புகளுடன் ஒப்புமை மூலம் இங்கு அனைத்தும் தெளிவாக இருப்பதாக நாங்கள் கருதுகிறோம்.