C# (.NET) में दिनांकों के साथ कार्य: पुस्तकालयों और अंतर्निहित उपकरणों का पूर्ण अवलोकन
\n\nदिनांक और समय का प्रसंस्करण डेवलपमेंट में सबसे सामान्य कार्यों में से एक है। C# (.NET) इकोसिस्टम में शक्तिशाली अंतर्निहित कार्यक्षमता (System.DateTime) के साथ-साथ तृतीय-पक्ष पुस्तकालय भी मौजूद हैं, जो जटिल परिदृश्यों को सरल बनाते हैं: समय क्षेत्रों के साथ कार्य, फ़ॉर्मेटिंग, अंतराल और पार्सिंग। इस लेख में हम .NET 6+ की आधुनिक क्षमताओं और लोकप्रिय NuGet पैकेजों सहित मुख्य उपकरणों पर चर्चा करेंगे।
1. अंतर्निहित साधन: DateTime, DateOnly, TimeOnly
\n\nमूल वर्ग System.DateTime .NET के पहले संस्करणों से उपलब्ध है। यह समर्थन करता है:
- \n
- दिनांक निर्माण:
new DateTime(2025, 3, 15)\n - अंकगणित:
date.AddDays(10),date.AddMonths(-1)\n - तुलना:
date1 > date2\n - फ़ॉर्मेटिंग:
date.ToString("yyyy-MM-dd")\n
.NET 6 से शुरू होकर, DateOnly और TimeOnly प्रकार सामने आए - ये समय क्षेत्र से बंधे नहीं हैं और केवल दिनांक या केवल समय संग्रहीत करते हैं। यह जन्मदिन, कार्य अनुसूचियों और समय-सारणियों के लिए सुविधाजनक है।
using System;\n\nDateOnly birthday = new DateOnly(1990, 5, 20);\nTimeOnly alarm = new TimeOnly(7, 30);\n\nConsole.WriteLine($"दिनांक: {birthday}, समय: {alarm}");\n// आउटपुट: दिनांक: 20.05.1990, समय: 07:30\n\n2. TimeSpan — समय अंतराल
\n\nसमय अंतरालों के साथ कार्य करने के लिए TimeSpan का उपयोग किया जाता है। यह दिनांकों के बीच अंतर, संचालन की अवधि और टाइमआउट की गणना करने की अनुमति देता है।
DateTime start = DateTime.Now;\n// ... कोड निष्पादन ...\nDateTime end = DateTime.Now;\n\nTimeSpan elapsed = end - start;\nConsole.WriteLine($"बीता: {elapsed.TotalSeconds} सेकंड।");\n\n3. Noda Time — दिनांकों के साथ उन्नत कार्य
\n\nNoda Time (NuGet: NodaTime) — जॉन स्कीट (C# पर लोकप्रिय पुस्तक के लेखक) द्वारा एक पुस्तकालय है। यह DateTime की समस्याओं को हल करता है:
- \n
- "समय में क्षण" (
Instant), "कैलेंडर में दिनांक" (LocalDate) और "क्षेत्र सहित समय" (ZonedDateTime) के बीच स्पष्ट विभाजन। \n - कैलेंडर के लिए समर्थन (इस्लामी, यहूदी, जापानी)। \n
- सभी प्रकारों की अपरिवर्तनीयता। \n
- IANA डेटाबेस (tzdata) के माध्यम से समय क्षेत्रों का सही प्रसंस्करण। \n
using NodaTime;\n\nInstant now = SystemClock.Instance.GetCurrentInstant();\nDateTimeZone zone = DateTimeZoneProviders.Tzdb["Europe/Moscow"];\nZonedDateTime moscowTime = now.InZone(zone);\n\nConsole.WriteLine($"मास्को में वर्तमान समय: {moscowTime:yyyy-MM-dd HH:mm}");\n\n// LocalDate के साथ कार्य\nLocalDate today = LocalDate.FromDateTime(DateTime.Today);\nLocalDate nextWeek = today.PlusDays(7);\n\nNoda Time विशेष रूप से उन परियोजनाओं में उपयोगी है जहाँ समय क्षेत्रों की सटीकता महत्वपूर्ण है (लॉग, बुकिंग, अंतर्राष्ट्रीय सिस्टम)।
\n\n4. Humanizer — मानव-पठनीय दिनांक
\n\nHumanizer (NuGet: Humanizer.Core) — संख्याओं, दिनांकों और समय को प्राकृतिक भाषा में बदलने के लिए एक पुस्तकालय है। यह निम्न में सक्षम है:
- \n
- सापेक्ष समय दिखाना: "3 मिनट पहले", "2 दिन बाद"। \n
- महीनों और सप्ताह के दिनों के नामों को विभक्त करना। \n
- समय अंतरालों को फ़ॉर्मेट करना: "1 घंटा 30 मिनट"। \n
using Humanizer;\n\nDateTime pastDate = DateTime.UtcNow.AddHours(-5);\nConsole.WriteLine(pastDate.Humanize()); // "5 घंटे पहले"\n\nTimeSpan span = new TimeSpan(2, 45, 0);\nConsole.WriteLine(span.Humanize()); // "2 घंटे 45 मिनट"\n\nHumanizer स्थानीयकरण का समर्थन करता है (रूसी भाषा — Humanizer.Core.ru)।
5. FluentDateTime — DateTime के लिए फ़्लुएंट इंटरफ़ेस
\n\nFluentDateTime (NuGet: FluentDateTime) — अधिक के लिए विस्तार विधियाँ जोड़ता है