सेकंड से वर्षों तक: C# में सापेक्ष समय की सही गणना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: हमें "सापेक्ष समय" की आवश्यकता क्यों है?

\n\n

क्या आपने कभी सोचा है कि सोशल नेटवर्क और समाचार साइटें "2 घंटे पहले" या "कल" क्यों लिखती हैं, न कि "25.04.2025 14:32"? क्योंकि हमारा मस्तिष्क सापेक्ष समय को बहुत तेज़ी से समझता है। निरपेक्ष तिथि के लिए विश्लेषण की आवश्यकता होती है: "ठीक है, आज 25 तारीख है, तो यह... था"। सापेक्ष तिथि तुरंत उत्तर देती है।

\n\n

यदि आप C# में लिख रहे हैं - चाहे वह ASP.NET पर वेब एप्लिकेशन हो, डेस्कटॉप एप्लिकेशन हो या Telegram-बॉट - देर-सबेर आपको उपयोगकर्ता को "अभी-अभी", "3 मिनट पहले" या "लगभग एक वर्ष पहले" प्रारूप में समय दिखाने की आवश्यकता होगी। Stack Overflow पर प्रश्न "Calculate relative time in C#" को हज़ारों बार देखा जा चुका है, जिसका अर्थ है कि यह डेवलपर्स की वास्तविक समस्या है।

\n\n

इस लेख में, हम C# में सापेक्ष समय की गणना करने के सबसे सही और लचीले तरीके पर चर्चा करेंगे। आपको तैयार कोड मिलेगा जिसे आप सीधे अपने प्रोजेक्ट में डाल सकते हैं, समझेंगे कि यह कैसे काम करता है, और जानेंगे कि इसे किसी भी आवश्यकता के अनुसार कैसे अनुकूलित किया जाए।

\n\n

समस्या: सरल तिथि घटाव में क्या खराबी है?

\n\n

पहली बात जो दिमाग में आती है - एक तिथि को दूसरी से घटाकर TimeSpan प्राप्त करना। हाँ, यह काम करता है। लेकिन शैतान विवरण में छिपा है:

\n\n
    \n
  • सीमा मान। "मिनट" कब समाप्त होता है और "घंटा" कब शुरू होता है? और "घंटा" कब "दिन" में बदलता है?
  • \n
  • भविष्य की तिथियाँ। यदि तिथि भविष्य में है तो क्या होगा? "5 मिनट में" दिखाएँ या "1 दिन में"?
  • \n
  • कोड की पठनीयता। यदि आप तर्क को पूरे प्रोजेक्ट में बिखेर देंगे, तो एक महीने बाद आप स्वयं भ्रमित हो जाएंगे।
  • \n
\n\n

इसलिए हमें केवल कोड का एक टुकड़ा नहीं, बल्कि एक एकीकृत, पुन: प्रयोज्य विधि की आवश्यकता है।

\n\n

समाधान: सापेक्ष समय की गणना के लिए सार्वभौमिक विधि

\n\n

सबसे अच्छा तरीका एक स्थिर विधि लिखना है जो DateTime (या DateTimeOffset) लेती है और एक सुंदर स्ट्रिंग लौटाती है। यहाँ एक बुनियादी, लेकिन पहले से ही बहुत शक्तिशाली कार्यान्वयन है, जिसे Stack Overflow पर चर्चाओं में पाया जा सकता है और अपने अनुसार अनुकूलित किया जा सकता है:

\n\n
using System;\n\npublic static class TimeHelper\n{\n    public static string GetRelativeTime(DateTime dateTime)\n    {\n        var now = DateTime.Now;\n        var utcNow = DateTime.UtcNow;\n\n        // महत्वपूर्ण: एक ही समय क्षेत्र में तुलना करें!\n        var timeSpan = now - dateTime;\n\n        // स्थिति 1: भविष्य में तिथि\n        if (timeSpan.TotalSeconds < 0)\n        {\n            // भविष्य के लिए निरपेक्ष मान की गणना करें\n            timeSpan = timeSpan.Duration();\n            if (timeSpan.TotalMinutes < 1)\n                return "कुछ सेकंड में";\n            if (timeSpan.TotalMinutes < 60)\n                return $"{timeSpan.Minutes} मिनट में";\n            if (timeSpan.TotalHours < 24)\n                return $"{timeSpan.Hours} घंटे में";\n            if (timeSpan.TotalDays < 30)\n                return $"{timeSpan.Days} दिन में";\n            if (timeSpan.TotalDays < 365)\n                return $"{timeSpan.Days / 30} महीने में";\n            return $"{timeSpan.Days / 365} वर्ष में";\n        }\n\n        // स्थिति 2: अतीत\n        if (timeSpan.TotalMinutes < 1)\n            return "अभी-अभी";\n        if (timeSpan.TotalMinutes < 60)\n            return $"{timeSpan.Minutes} मिनट पहले";\n        if (timeSpan.TotalHours < 24)\n            return $"{timeSpan.Hours} घंटे पहले";\n        if (timeSpan.TotalDays < 7)\n            return $"{timeSpan.Days} दिन पहले";\n\n        // एक सप्ताह से अधिक पुरानी तिथियों के लिए दिनों का उपयोग करें\n        if (timeSpan.TotalDays < 30)\n            return $"{(int)timeSpan.TotalDays} दिन पहले";\n        if (timeSpan.TotalDays < 365)\n        {\n            int months = (int)(timeSpan.TotalDays / 30);\n            return $"{months} महीने पहले";\n        }\n\n        int years = (int)(timeSpan.TotalDays / 365);\n        return $"{years} वर्                

ब्लॉग

पुस्तक अनुशंसाएँ