1. ZonedDateTimeवर्ग

डेट टाइम एपीआई में एक और बहुत ही दिलचस्प वर्ग है: 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)
नैनोसेकंड घटाता है

हम कोई उदाहरण नहीं देंगे, क्योंकि हमें लगता है कि यहाँ सब कुछ उन वर्गों के अनुरूप स्पष्ट है जिन्हें हमने अभी माना है।