जावा में दिनांक और समय के साथ उन्नत कार्य: LocalDate से जटिल हेरफेर तक
\n\nआधुनिक जावा (संस्करण 8 से शुरू) में, दिनांक और समय के साथ कार्य करने के लिए डी-फैक्टो मानक पैकेज java.time है। इसने पुराने java.util.Date और java.util.Calendar को बदल दिया है, जो अपरिवर्तनीय (immutable) ऑब्जेक्ट, थ्रेड-सुरक्षा और सहज ज्ञान युक्त API प्रदान करता है। इस लेख में, हम उन्नत तकनीकों पर चर्चा करेंगे: समय क्षेत्रों के साथ कार्य, सटीक अंतर गणना, कस्टम एडजस्टर और जटिल फ़ॉर्मेटिंग।
1. TemporalAdjusters के माध्यम से दिनांकों में हेरफेर
\n\njava.time की सबसे शक्तिशाली विशेषताओं में से एक इंटरफ़ेस TemporalAdjuster है। यह दिनांकों में जटिल समायोजन करने की अनुमति देता है — उदाहरण के लिए, "अगला मंगलवार" या "महीने का अंतिम दिन" खोजना।
क्लास TemporalAdjusters (बहुवचन पर ध्यान दें) में तैयार स्थैतिक विधियाँ हैं:
- \n
firstDayOfMonth()— महीने का पहला दिन; \n lastDayOfMonth()— महीने का अंतिम दिन; \n next(DayOfWeek.FRIDAY)— अगला निर्दिष्ट सप्ताह का दिन; \n previousOrSame(DayOfWeek.MONDAY)— पिछला या वर्तमान सोमवार। \n
उदाहरण: 15 मार्च 2024 के बाद अगले बुधवार की तारीख खोजें।
\n\nimport java.time.LocalDate;\nimport java.time.DayOfWeek;\nimport java.time.temporal.TemporalAdjusters;\n\npublic class TemporalExample {\n public static void main(String[] args) {\n LocalDate date = LocalDate.of(2024, 3, 15);\n LocalDate nextWednesday = date.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));\n System.out.println("अगला बुधवार: " + nextWednesday);\n // आउटपुट: 2024-03-20\n }\n}\n\n\nआप कार्यात्मक इंटरफ़ेस TemporalAdjuster को लागू करके अपने स्वयं के एडजस्टर भी बना सकते हैं। यह व्यावसायिक तर्क के लिए विशेष रूप से उपयोगी है: "महीने का पहला कार्य दिवस" या "तिमाही का अंतिम शुक्रवार"।
2. समय क्षेत्रों और ZonedDateTime के साथ कार्य
\n\nवैश्विक अनुप्रयोगों को समय क्षेत्रों को ध्यान में रखना चाहिए। क्लास ZonedDateTime दिनांक, समय और क्षेत्र (ZoneId) को जोड़ता है।
उदाहरण: ग्रीष्म/शीतकालीन समय को ध्यान में रखते हुए न्यूयॉर्क से बर्लिन में समय का रूपांतरण।
\n\nimport java.time.ZonedDateTime;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\n\npublic class ZoneExample {\n public static void main(String[] args) {\n ZonedDateTime newYork = ZonedDateTime.now(ZoneId.of("America/New_York"));\n ZonedDateTime berlin = newYork.withZoneSameInstant(ZoneId.of("Europe/Berlin"));\n\n DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm z");\n System.out.println("न्यूयॉर्क: " + newYork.format(formatter));\n System.out.println("बर्लिन: " + berlin.format(formatter));\n }\n}\n\n\nमहत्वपूर्ण: सभी उपलब्ध क्षेत्र प्राप्त करने के लिए ZoneId.getAvailableZoneIds() का उपयोग करें। तीन-अक्षर वाले संक्षिप्ताक्षरों (EST, PST) से बचें — वे अस्पष्ट हैं। हमेशा continent/city प्रारूप का उपयोग करें (उदाहरण के लिए, Asia/Tokyo)।
3. सटीक अंतर गणना: ChronoUnit और Duration
\n\nजावा में दिनांकों के बीच अंतर की गणना करने के दो तरीके हैं:
\n\n- \n
ChronoUnit— कैलेंडर इकाइयों (दिन, महीने, वर्ष) में अंतर के लिए; \n Duration— सटीक समय अंतराल (सेकंड, नैनोसेकंड) के लिए। \n
उदाहरण: नए साल तक कितने दिन और महीने बचे हैं?
\n\nimport java.time.LocalDate;\nimport java.time.temporal.ChronoUnit;\n\npublic class DiffExample {\n public static void main(String[] args) {\n LocalDate today = LocalDate.now();\n LocalDate newYear = LocalDate.of(today.getYear() + 1, 1, 1);\n\n long days = ChronoUnit.DAYS.between(today, new