Java में दिनांक और समय के साथ काम करने का परिचय
दिनांक और समय के साथ काम करना डेवलपमेंट में सबसे आम कार्यों में से एक है। चाहे वह इवेंट लॉग करना हो, समय सीमा की गणना करना हो, डेटा फ़िल्टर करना हो या कैलेंडर प्रदर्शित करना हो — टेम्पोरल API पर अच्छी पकड़ के बिना काम नहीं चल सकता। Java में लंबे समय तक java.util.Date और java.util.Calendar क्लास का उपयोग किया जाता था, लेकिन उनमें कई कमियाँ थीं: म्यूटेबिलिटी, गैर-सहज API, थ्रेड से जुड़ी समस्याएँ।
Java 8 से शुरू करके, भाषा में एक नया पैकेज java.time जोड़ा गया, जो ISO-8601 मानक पर आधारित है। यह immutable (अपरिवर्तनीय) और thread-safe क्लास प्रदान करता है, जो उपयोग में अधिक सुविधाजनक हैं। इस लेख में हम पुराने और नए दोनों दृष्टिकोणों को समझेंगे, साथ ही व्यावहारिक कोड उदाहरण भी दिखाएँगे।
1. पुरानी क्लासेज़: Date और Calendar
हालाँकि नए प्रोजेक्ट्स में Date और Calendar के उपयोग की अनुशंसा नहीं की जाती है, फिर भी आप उन्हें लीगेसी कोड में देख सकते हैं। आइए मुख्य बिंदुओं पर नज़र डालते हैं।
java.util.Date क्लास
Date क्लास मिलीसेकंड सटीकता के साथ समय में एक विशिष्ट क्षण का प्रतिनिधित्व करता है। इसकी कई पुरानी विधियाँ हैं।
import java.util.Date;
public class DateExample { public static void main(String[] args) { // वर्तमान दिनांक और समय Date now = new Date(); System.out.println("वर्तमान समय: " + now);
// मिलीसेकंड के साथ कंस्ट्रक्टर (1 जनवरी 1970 से) Date specificDate = new Date(1000000000000L); System.out.println("दिनांक: " + specificDate);
// दिनांकों की तुलना boolean after = now.after(specificDate); System.out.println("क्या now specificDate के बाद है? " + after); }}java.util.Calendar क्लास
Calendar — दिनांकों में हेरफेर के लिए अधिक लचीली, लेकिन फिर भी असुविधाजनक क्लास है।
import java.util.Calendar;
public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // एक विशिष्ट दिनांक सेट करना cal.set(2025, Calendar.MARCH, 15, 10, 30, 0); System.out.println("सेट की गई दिनांक: " + cal.getTime());
// अलग-अलग फ़ील्ड प्राप्त करना int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH) + 1; // महीने 0 से शुरू होते हैं int day = cal.get(Calendar.DAY_OF_MONTH); System.out.println("वर्ष: " + year + ", महीना: " + month + ", दिन: " + day);
// दिन जोड़ना cal.add(Calendar.DAY_OF_MONTH, 10); System.out.println("10 दिन बाद: " + cal.getTime()); }}कमियाँ: म्यूटेबिलिटी (विधियाँ ऑब्जेक्ट को ही बदल देती हैं), टाइम ज़ोन के साथ काम करने में जटिलता, महीनों के इंडेक्स में भ्रम।
2. आधुनिक API: java.time (Java 8+)
पैकेज java.time पुरानी क्लासेज़ की सभी समस्याओं का समाधान करता है। मुख्य क्लासेज़:
- LocalDate — बिना समय के दिनांक (वर्ष, महीना, दिन);
- LocalTime — बिना दिनांक के समय (घंटे, मिनट, सेकंड, नैनोसेकंड);
- LocalDateTime — बिना टाइम ज़ोन के दिनांक और समय;
- ZonedDateTime — टाइम ज़ोन के साथ दिनांक और समय;
- Instant — UTC में समय का एक क्षण;
- Duration और Period — समय अंतराल के साथ काम करने के लिए।
LocalDate — दिनांकों के साथ काम करना
import java.time.LocalDate;import java.time.Month;
public class LocalDateExample { public static void main(String[] args) { // वर्तमान दिनांक LocalDate today = LocalDate.now(); System.out.println("आज: " + today);
// विशिष्ट दिनांक LocalDate specific = LocalDate.of(2025, Month.DECEMBER, 25); System.out.println("क्रिसमस: " + specific);
// दिन जोड़ना LocalDate nextWeek = to
```