Java में दिनांक और समय के साथ उन्नत कार्य: बुनियादी से पेशेवर स्तर तक
\n\nदिनांक और समय के साथ काम करना किसी भी enterprise-एप्लिकेशन का एक मुख्य कार्य है। Java में लंबे समय तक java.util.Date और java.util.Calendar मानक थे, लेकिन Java 8 के आने से स्थिति पूरी तरह बदल गई। नए java.time API (JSR-310) ने डेवलपर्स को एक शक्तिशाली, थ्रेड-सेफ और सहज टूलकिट प्रदान किया। इस लेख में हम दिनांक और समय के साथ काम करने की उन्नत तकनीकों पर चर्चा करेंगे जो हर Java डेवलपर के लिए उपयोगी होंगी।
1. java.time API की मूल बातें: LocalDate, LocalTime, LocalDateTime
\n\nपेशेवर काम की ओर पहला कदम तीन बुनियादी क्लासेस को समझना है जिन्होंने पुराने विकल्पों को बदल दिया:
\n\n- \n
- LocalDate — बिना समय के दिनांक (वर्ष, महीना, दिन)। \n
- LocalTime — बिना दिनांक के समय (घंटे, मिनट, सेकंड, नैनोसेकंड)। \n
- LocalDateTime — बिना टाइम ज़ोन के दिनांक और समय का संयोजन। \n
// वर्तमान दिनांक और समय प्राप्त करना\nLocalDate today = LocalDate.now(); // 2025-03-21\nLocalTime now = LocalTime.now(); // 14:30:15.123\nLocalDateTime current = LocalDateTime.now(); // 2025-03-21T14:30:15.123\n\n// विशिष्ट दिनांक बनाना\nLocalDate birthDate = LocalDate.of(1990, Month.JUNE, 15);\nLocalTime meetingTime = LocalTime.of(10, 30, 0);\n\n// दिनांकों में हेरफेर\nLocalDate nextWeek = today.plusWeeks(1);\nLocalDate lastMonth = today.minusMonths(1);\n\nये क्लासेस इम्यूटेबल हैं — कोई भी ऑपरेशन एक नया ऑब्जेक्ट लौटाता है। यह थ्रेड-सेफ्टी और कोड की पूर्वानुमेयता सुनिश्चित करता है।
\n\n2. टाइम ज़ोन के साथ काम करना: ZonedDateTime और ZoneId
\n\nग्लोबल एप्लिकेशन टाइम ज़ोन को नज़रअंदाज़ नहीं कर सकते। इसके लिए java.time में ZonedDateTime क्लास प्रदान की गई है।
// UTC में वर्तमान समय\nZonedDateTime utcNow = ZonedDateTime.now(ZoneOffset.UTC);\n\n// किसी विशिष्ट टाइम ज़ोन में समय\nZoneId moscowZone = ZoneId.of("Europe/Moscow");\nZonedDateTime moscowTime = ZonedDateTime.now(moscowZone);\n\n// ज़ोन के बीच रूपांतरण\nZonedDateTime nyTime = moscowTime.withZoneSameInstant(ZoneId.of("America/New_York"));\n\n// ऑफ़सेट प्राप्त करना\nZoneOffset offset = moscowTime.getOffset(); // +03:00\n\nपेशेवर सलाह: सर्वर पर हमेशा UTC में दिनांक स्टोर करें और केवल प्रेजेंटेशन लेयर (UI) पर स्थानीय टाइम ज़ोन में बदलें। इससे डेलाइट सेविंग टाइम की समस्याओं से बचा जा सकेगा।
\n\n3. दिनांकों का पार्सिंग और फ़ॉर्मेटिंग: DateTimeFormatter
\n\nसबसे आम कार्यों में से एक है स्ट्रिंग को दिनांक में बदलना और इसका उल्टा। DateTimeFormatter लचीली क्षमताएँ प्रदान करता है।
बुनियादी फ़ॉर्मेटिंग
\n\nDateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");\nLocalDateTime dateTime = LocalDateTime.parse("21.03.2025 14:30:00", formatter);\nString formatted = dateTime.format(formatter); // "21.03.2025 14:30:00"\n\nउन्नत पैटर्न
\n\n// ISO-8601\nDateTimeFormatter isoFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;\nString isoDate = dateTime.format(isoFormatter); // "2025-03-21T14:30:00"\n\n// स्थानीयकृत फ़ॉर्मेटिंग\nDateTimeFormatter italianFormatter = DateTimeFormatter.ofPattern("d MMMM yyyy", Locale.ITALY);\nString italianDate = dateTime.format(italianFormatter); // "21 marzo 2025"\n\n// टेक्स्ट फ़ील्ड के साथ कस्टम फ़ॉर्मेट\nDateTimeFormatter customFormatter = new DateTimeFormatterBuilder()\n .appendValue(ChronoField.YEAR)\n .appendLiteral(" वर्ष, ")\n .appendText(ChronoField.MONTH_OF_YEAR, TextStyle.FULL)\n .appendLiteral(" ")\n .appendValue(ChronoField.DAY_OF_MONTH)\n .toFormatter();\nString custom = dateTime.format(customFormatter); // "2025 वर्ष, मार्च 21"\n\nयाद रखना महत्वपूर्ण है: DateTimeFormatter भी इम्यूटेबल और थ्रेड-सेफ है, इसलिए इसे एक बार बनाकर पूरे एप्लिकेशन में पुनः उपयोग किया जा सकता है।