Java दिनांक और समय
⚡ स्मार्ट सारांश
Java दिनांक और समय प्रबंधन में पुरानी java.util.Date और SimpleDateFormat कक्षाओं को आधुनिक java.time API के साथ जोड़ा गया है, जिसे इसमें शामिल किया गया है। Java 8, डेवलपर्स को सटीक कैलेंडर कार्य के लिए अपरिवर्तनीय, थ्रेड-सुरक्षित प्रकार प्रदान करता है।

दिनांक और समय को संभालना Java यह शेड्यूलिंग लॉजिक, लॉग टाइमस्टैम्प, रिपोर्ट और ऑडिट ट्रेल बनाने का एक नियमित हिस्सा है। कोई भी कोड लिखने से पहले, यह जानना मददगार होता है कि तिथि किन मापदंडों से बनती है:
- RSI वर्ष (दो या चार अंकों में)।
- RSI माह (दो अंकों के रूप में, महीने के पहले तीन अक्षरों के रूप में, या पूरे महीने के नाम के रूप में)।
- RSI डेटा (महीने की वास्तविक तिथि संख्या)।
- RSI दिन (दी गई तिथि को दिन का नाम, जैसे रवि, सोम, मंगल)।
Java यह टाइमलाइन पर किसी क्षण का वर्णन करने वाले कई अन्य मापदंडों को उजागर करता है, जिनमें युग, वर्ष का सप्ताह, समय क्षेत्र और ऑफ़सेट शामिल हैं। नीचे दिए गए अनुभागों में इनमें से प्रत्येक को उदाहरणों सहित समझाया गया है।
दिनांक प्रदर्शित करें Java
Java प्रदान करता है एक Date कक्षा में java.util यह क्लास एक पैकेज का हिस्सा है। यह क्लास समय के एक विशिष्ट क्षण को मिलीसेकंड की सटीकता तक स्टोर करती है और उस क्षण को प्रिंट करने, तुलना करने और फॉर्मेट करने के लिए सहायक मेथड प्रदान करती है। वर्तमान तिथि और समय प्राप्त करने के लिए, इस क्लास को इसके डिफ़ॉल्ट कंस्ट्रक्टर के साथ इंस्टैंशिएट करें:
import java.util.Date; class Date_Ex1 { public static void main(String args[]) { // Instantiate a Date object by invoking its constructor Date objDate = new Date(); // Display the Date and Time using toString() System.out.println(objDate.toString()); } }
आउटपुट:
Wed Nov 29 06:36:22 UTC 2017
यह उदाहरण दिनांक को डिफ़ॉल्ट toString प्रारूप में प्रिंट करता है। उसी समय को किसी भिन्न प्रारूप में प्रदर्शित करने के लिए, आपको पहले प्रारूपण अक्षरों को समझना होगा। Java का उपयोग करता है।
SimpleDateFormat: तिथियों को पार्स और प्रारूपित करें
RSI SimpleDateFormat कक्षा में java.text एक परिवर्तित करता है Date ऑब्जेक्ट को एक स्वरूपित स्ट्रिंग में परिवर्तित करता है और उस स्वरूपित स्ट्रिंग को वापस पार्स करता है। Dateयह पैटर्न अक्षरों का उपयोग करता है जो दिनांक या समय घटक से मेल खाते हैं। नीचे दी गई तालिका में सभी समर्थित अक्षर सूचीबद्ध हैं:
| पत्र | दिनांक या समय घटक | उदाहरण |
|---|---|---|
| G | युग निर्दिष्टक | AD |
| y | साल | 2026 |
| M | वर्ष में महीना | जुलाई या जुलाई या 07 |
| w | वर्ष में सप्ताह | 27 |
| W | सप्ताह दर सप्ताह महीना | 2 |
| D | वर्ष में दिन | 189 |
| d | महीने में दिन | 10 |
| F | महीने में सप्ताह का दिन | 2 |
| E | सप्ताह में दिन का नाम | मंगलवार या मंगल |
| u | सप्ताह का दिन संख्या (1 = Monday(7 = रविवार) | 1 |
| a | AM या PM मार्कर | PM |
| H | दिन में घंटा (0-23) | 0 |
| k | दिन में घंटा (1-24) | 24 |
| K | सुबह या शाम का घंटा (0-11) | 0 |
| h | सुबह या शाम का घंटा (1-12) | 12 |
| m | मिनट प्रति घंटा | 30 |
| s | मिनट में सेकंड | 55 |
| S | मिलीसेकंड | 978 |
| z | समय क्षेत्र (नाम) | प्रशांत मानक समय; PST; GMT-08:00 |
| Z | समय क्षेत्र (आरएफसी 822 ऑफ़सेट) | -0800 |
| X | समय क्षेत्र (आईएसओ 8601 ऑफसेट) | -08 या -0800 या -08:00 |
आपको पूरी तालिका याद रखने की आवश्यकता नहीं है। जब भी आप कोई नया पैटर्न बनाएं, तो इसे देखें।
SimpleDateFormat का उपयोग कैसे करें
SimpleDateFormat का एक उपवर्ग है DateFormat यह आपको ऊपर दिए गए पैटर्न अक्षरों का उपयोग करके तिथियों को फॉर्मेट करने और पार्स करने की सुविधा देता है। आप जिस सटीक स्ट्रिंग को उत्पन्न या पढ़ना चाहते हैं, उसे बताने के लिए अक्षरों को संयोजित करें।
उदाहरण के लिए:
- दिनांक प्रारूप आवश्यक: 2012.10.23 20:20:45 पीएसटीउपयुक्त प्रारूप पैटर्न यह है:
yyyy.MM.dd HH:mm:ss zzz. - दिनांक प्रारूप आवश्यक: 09:30:00 AM 23-May-2012उपयुक्त प्रारूप पैटर्न यह है:
hh:mm:ss a dd-MMM-yyyy.
सुझाव: अक्षर का केस देखें। अपरकेस M महीना है, छोटे अक्षरों में m मिनट है। अपरकेस H यह 24 घंटे की घड़ी है, छोटे अक्षरों में। h यह 12 घंटे की घड़ी है। इन्हें आपस में मिलाने से चुपचाप गलत परिणाम मिलता है।
नीचे दिया गया प्रोग्राम वर्तमान तिथि को दो बार प्रिंट करता है, एक बार डिफ़ॉल्ट प्रारूप में और एक बार SimpleDateFormat पैटर्न के माध्यम से:
import java.text.SimpleDateFormat; import java.util.Date; class TestDates_Format { public static void main(String args[]) { // Current system date and time is assigned to objDate Date objDate = new Date(); System.out.println(objDate); // Build the target pattern and format the date String strDateFormat = "hh:mm:ss a dd-MMM-yyyy"; SimpleDateFormat objSDF = new SimpleDateFormat(strDateFormat); System.out.println(objSDF.format(objDate)); } }
आउटपुट:
Wed Nov 29 06:31:41 UTC 2017 06:31:41 AM 29-Nov-2017
तिथियों की तुलना उदाहरण
दो ऑर्डर करने का सबसे विश्वसनीय तरीका Date वस्तुएँ हैं compareTo() यह विधि तब ऋणात्मक पूर्णांक लौटाती है जब कॉल करने वाला पहले होता है, दोनों क्षणों के बराबर होने पर शून्य, और कॉल करने वाले बाद में होने पर धनात्मक पूर्णांक लौटाती है। नीचे दिया गया कोड स्निपेट दो दिनांक स्ट्रिंग को पार्स करता है और उनका सापेक्ष क्रम प्रिंट करता है:
import java.text.SimpleDateFormat; import java.text.ParseException; import java.util.Date; class TestDates_Compare { public static void main(String args[]) throws ParseException { SimpleDateFormat objSDF = new SimpleDateFormat("dd-MM-yyyy"); Date dt_1 = objSDF.parse("20-08-1981"); Date dt_2 = objSDF.parse("12-10-2012"); System.out.println("Date1 : " + objSDF.format(dt_1)); System.out.println("Date2 : " + objSDF.format(dt_2)); // compareTo returns > 0 when dt_1 is after dt_2 if (dt_1.compareTo(dt_2) > 0) { System.out.println("Date 1 occurs after Date 2"); } // compareTo returns < 0 when dt_1 is before dt_2 else if (dt_1.compareTo(dt_2) < 0) { System.out.println("Date 1 occurs before Date 2"); } // compareTo returns 0 when both dates are equal else { System.out.println("Both are the same date"); } } }
आउटपुट:
Date1 : 20-08-1981 Date2 : 12-10-2012 Date 1 occurs before Date 2
नोट: मूल कोड ने इस पैटर्न का उपयोग किया था। dd-mm-yyyy। लोअरकेस mm यह अक्षर मिनट है, महीना नहीं, इसलिए पार्सर ने अनजाने में महीने का गलत मान उत्पन्न कर दिया। ऊपर दिए गए समाधान में अपरकेस का उपयोग किया गया है। MM महीने के लिए, जो सही पैटर्न अक्षर है।
Java 8 आधुनिक दिनांक और समय एपीआई (java.time)
Java 8 ने परिचय दिया java.time यह पैकेज, Joda-Time लाइब्रेरी से प्रेरित एक नया API डिज़ाइन करता है। नई क्लासें अपरिवर्तनीय और थ्रेड-सेफ हैं, और मानव कैलेंडर को मशीन टाइमलाइन से अलग करती हैं। सबसे आम प्रकार हैं:
LocalDateकिसी ऐसी तारीख के लिए जिसमें समय या क्षेत्र का उल्लेख न हो (उदाहरण के लिए, जन्मदिन)।LocalTimeबिना तारीख या क्षेत्र दिखाए दीवार घड़ी का समय देखने के लिए।LocalDateTimeबिना ज़ोन वाली तिथि और समय के लिए।ZonedDateTimeकिसी विशिष्ट समय क्षेत्र वाली तिथि और समय के लिए।OffsetDateTimeकिसी तिथि और समय के लिए जिसमें यूटीसी ऑफसेट हो लेकिन कोई नामित क्षेत्र न हो।Instantमशीन टाइमस्टैम्प के लिए, जिसे यूनिक्स युग से मापा जाता है।DurationऔरPeriodसमय-आधारित और तिथि-आधारित राशियों के लिए।
नीचे दिया गया उदाहरण आधुनिक एपीआई का उपयोग करके वर्तमान तिथि, समय, टाइमस्टैम्प और समय क्षेत्र को प्रिंट करता है:
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.time.Instant; import java.time.ZoneId; class ModernDateDemo { public static void main(String args[]) { LocalDate today = LocalDate.now(); LocalDateTime now = LocalDateTime.now(); ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Asia/Kolkata")); Instant epoch = Instant.now(); System.out.println("LocalDate : " + today); System.out.println("LocalDateTime : " + now); System.out.println("ZonedDateTime : " + zoned); System.out.println("Instant : " + epoch); } }
प्रत्येक प्रकार में फैक्ट्री विधियाँ होती हैं (now, of, parse) और अपरिवर्तनीय संचालन (plusDays, minusHours, withYear) जो मूल ऑब्जेक्ट को परिवर्तित करने के बजाय एक नया मान लौटाते हैं।
डेटटाइमफॉर्मेटर: आधुनिक प्रारूपों में तिथियों को प्रारूपित करें Java
DateTimeFormatter in java.time.format बदल देता है SimpleDateFormatयह पैटर्न अक्षरों की समान शैली का उपयोग करता है, अपरिवर्तनीय है, और अतिरिक्त सिंक्रोनाइज़ेशन के बिना थ्रेड्स में साझा करने के लिए सुरक्षित है। यह क्लास तैयार स्थिरांक भी प्रदान करती है जैसे कि ISO_LOCAL_DATE और ISO_ZONED_DATE_TIME मानक प्रारूपों के लिए।
import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; class FormatterDemo { public static void main(String args[]) { LocalDateTime now = LocalDateTime.now(); DateTimeFormatter iso = DateTimeFormatter.ISO_LOCAL_DATE_TIME; DateTimeFormatter human = DateTimeFormatter.ofPattern("hh:mm:ss a dd-MMM-yyyy"); System.out.println(now.format(iso)); System.out.println(now.format(human)); LocalDateTime parsed = LocalDateTime.parse("2026-07-04T09:30:00", iso); System.out.println("Parsed back : " + parsed); } }
आधुनिक API में दो तिथियों की तुलना करने के लिए, कॉल करें isBefore, isAfterया, isEqualये विधियाँ अधिक स्पष्ट रूप से समझ में आती हैं। compareTo और हर किसी के साथ काम करें java.time वर्ग.
धागे की सुरक्षा और सर्वोत्तम अभ्यास Java दिनांक और समय
दोनों java.util.Date और SimpleDateFormat आधुनिक समवर्ती से पहले Javaऔर इन सभी में कुछ ज्ञात कमियां हैं। प्रोडक्शन कोड में दिनांक प्रबंधन को सही रखने के लिए नीचे दिए गए तरीकों का पालन करें:
- Date और Calendar की जगह java.time को प्राथमिकता दें। नए प्रकार अपरिवर्तनीय और थ्रेड-सुरक्षित हैं, और वे डोमेन को अधिक सटीक रूप से मॉडल करते हैं (समय के बिना तिथियां, क्षेत्रों के बिना समय, इत्यादि)।
- SimpleDateFormat को अलग-अलग थ्रेड्स में साझा न करें। यह क्लास आंतरिक पार्स स्थिति को संग्रहीत करती है और थ्रेड-सुरक्षित नहीं है। इसे एक में लपेटें
ThreadLocalइंस्टेंस पर सिंक्रनाइज़ करें, या स्विच करेंDateTimeFormatter. - हमेशा लोकेल निर्दिष्ट करें। महीने और दिन के नाम JVM के डिफ़ॉल्ट लोकेल के साथ बदलते हैं, जिससे पैटर्न इस प्रकार हो जाते हैं।
MMMऔरEEEपोर्टेबल नहीं। लोकेल को स्पष्ट रूप से पास करें (उदाहरण के लिए,Locale.ENGLISH). - समय क्षेत्रों के बारे में स्पष्ट रूप से बताएं।
LocalDateTimeइसमें कोई ज़ोन नहीं है, इसलिए इसे बदलेंZonedDateTimeorInstantजब भी सटीक समय मायने रखता है, खासकर लॉग, डेटाबेस कॉलम और नेटवर्क पेलोड के लिए। - दोनों एपीआई के बीच सावधानीपूर्वक रूपांतरण करें। उपयोग
date.toInstant(),Date.from(instant), तथाcalendar.toInstant().atZone(zone)लेगेसी कोड और आधुनिक कोड की सीमा पर। - टाइमस्टैम्प को UTC में स्टोर करें। दृढ़ रहें और transmit तिथियां यूटीसी के रूप में (एक
Instantया एक आईएसओ 8601 स्ट्रिंग) और केवल प्रदर्शित करते समय उपयोगकर्ता क्षेत्र में परिवर्तित करें।


