C # में DateTime की तुलना कैसे करें?


137

मैं नहीं चाहता कि उपयोगकर्ता बैक डेट या समय दे।

यदि दर्ज की गई तिथि और समय कम है तो वर्तमान समय कैसे हो सकता है?

यदि वर्तमान तिथि और समय 17-जून -2010, 12:25 अपराह्न है, तो मैं चाहता हूं कि उपयोगकर्ता 17 जून -2010 से पहले की तारीख और समय 12:25 बजे से पहले न दे।

जैसे मेरा फ़ंक्शन गलत है यदि उपयोगकर्ता द्वारा दर्ज किया गया समय 16-जून -2010 और समय 12:24 बजे है

जवाबों:


179

MSDN: DateTime.Compare

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
// The example displays the following output:
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

3
आपका उत्तर यह देखने का एक तरीका प्रदान करता है कि अंतर क्या है, यह जानने के बजाय कि तारीख पहले या बाद में है। बेशक उनका जवाब ओपी के लिए बेहतर है, लेकिन आपका कुछ उन लोगों के लिए बेहतर है, जो गूगल (स्वयं शामिल) से यहां आए हैं।
लेविनिन्जा

2
मुझे आपका उत्तर मूल्यवान लगा क्योंकि मैं कुछ विरासत कोड देख रहा हूँ जहाँ यह प्रयोग किया जाता है
एरिक बर्गस्टेड


लेकिन डिबग के नजरिए से, मुस्ताएनजी का जवाब अधिक पठनीय है।
हिमालय गर्ग

295

Microsoft ने '<' और '>' ऑपरेटरों को भी लागू किया है। इसलिए आप दो तिथियों की तुलना करने के लिए इनका उपयोग करें।

if (date1 < DateTime.Now)
   Console.WriteLine("Less than the current time!");

6
स्रोत MSDN; इन documeted कर रहे हैं के रूप में दिनांक समय ऑपरेटर्स awkwardly के रूप में "से DateTime.Greater" करार दिया "DateTime.LessThanOrEqualTo" ..... msdn.microsoft.com/en-us/library/ff986512%28v=vs.90%29.aspx
सलमान सिद्दीकी

वर्तमान .NET संस्करण: msdn.microsoft.com/en-us/library/ff986512(v=vs.110).aspx
juFo

2
मैं एकता 2017 का उपयोग कर रहा हूं और सूचियों को क्रमबद्ध करने के लिए इस ऑपरेटर का उपयोग करने से मुझे गलत परिणाम मिलते हैं। मैंने भी सीधे DateTime.ticks की तुलना करने की कोशिश की और वह भी असफल रहा। मुझे सही परिणामों पर पहुंचने के लिए DateTime.CompareTo का उपयोग करना पड़ा और मुझे नहीं पता कि क्यों।
लिन

2
ये गलत है। यह सही तरीके से UTC और स्थानीय समय की तुलना नहीं कर सकता है।
अल्टियानो पियानो

4
यह पूर्ण उत्तर नहीं है। महासागरों में डेटाइम काइंड लेते समय, यह date1.ToLocalTime() < DateTime.Nowया तो होना चाहिए या date1.ToUniversalTime() < DateTime.UtcNow
युरिस्लाव

21

MuSTaNG का जवाब यह सब कहता है, लेकिन मैं अभी भी इसे जोड़ने के लिए इसे थोड़ा और विस्तृत कर रहा हूं, लिंक और सभी के साथ।


पारंपरिक ऑपरेटरों

DateTime.NET फ्रेमवर्क 1.1 के लिए उपलब्ध हैं । इसके अलावा, इसके अलावा और घटाव की DateTimeवस्तुओं भी संभव हैं पारंपरिक ऑपरेटर्स का उपयोग +और -

MSDN से एक उदाहरण:

समानता:
System.DateTime april19 = new DateTime(2001, 4, 19);
System.DateTime otherDate = new DateTime(1991, 6, 5);

// areEqual gets false.
bool areEqual = april19 == otherDate;

otherDate = new DateTime(2001, 4, 19);
// areEqual gets true.
areEqual = april19 == otherDate;

इसी तरह अन्य ऑपरेटरों का इस्तेमाल किया जा सकता है।

यहाँ सूची सभी ऑपरेटरों के लिए उपलब्ध है DateTime


1
आप विस्तृत रूप से उनके उत्तर को संपादित कर सकते हैं। किसी भी स्थिति में, आप +दो DateTimeऑपरेंड के लिए उपयोग नहीं कर सकते , आप कर सकते हैं DateTime - DateTime, या DateTime + TimeSpan, या DateTime - TimeSpan
जॉय

5

सामान्य स्थिति में आपको DateTimesउसी की तुलना करने की आवश्यकता है Kind:

if (date1.ToUniversalTime() < date2.ToUniversalTime())
    Console.WriteLine("date1 is earlier than date2");

से स्पष्टीकरण MSDN के बारे में DateTime.Compare(यह भी तरह ऑपरेटरों के लिए प्रासंगिक है >, <, ==और आदि):

T1 से t2 के संबंध को निर्धारित करने के लिए, तुलना विधि t1 और t2 की टिक्स संपत्ति की तुलना करती है, लेकिन उनकी तरह की संपत्ति को अनदेखा करती है । डेटटाइम ऑब्जेक्ट्स की तुलना करने से पहले, सुनिश्चित करें कि ऑब्जेक्ट एक ही टाइम ज़ोन में समय का प्रतिनिधित्व करते हैं।

इस प्रकार, एक साधारण तुलना एक अनपेक्षित परिणाम दे सकती है जब इससे निपटने के लिए DateTimesअलग-अलग टाइमज़ोन में प्रतिनिधित्व किया जाता है।


बस इस वजह से एक बग था ... wth वे सोच रहे थे जब उन्होंने वह तरीका बनाया :(
लेगोलस

3

यदि आपके पास दो DateTime हैं जो समान दिखते हैं, लेकिन तुलना करें या बराबर करें जो आप अपेक्षा करते हैं, वह वापस नहीं आता है, तो यह है कि उनकी तुलना कैसे करें।

यहां 1-मिलीसेकंड परिशुद्धता के साथ एक उदाहरण दिया गया है:

bool areSame = (date1 - date2) > TimeSpan.FromMilliseconds(1d);

1
//Time compare.
private int CompareTime(string t1, string t2)
{
    TimeSpan s1 = TimeSpan.Parse(t1);
    TimeSpan s2 = TimeSpan.Parse(t2);
    return s2.CompareTo(s1);
}

2
वह तुलना DateTimeनहीं करना चाहते हैंstring
दान

आप डेटाइम को स्ट्रिंग में परिवर्तित कर सकते हैं
फान

या: आप उपयोग कर सकते हैं: DateTime.Compare (शुरू करें, समाप्त करें)
Dieu Phan Dinh

मेरी समस्या नहीं है और क्या यह अहमत से भिन्न है ?
दानह

0

यहाँ एकता मिलिअ में एक विशिष्ट सरल उदाहरण है

using UnityEngine;

public class Launch : MonoBehaviour
{
    void Start()
    {
        Debug.Log("today " + System.DateTime.Now.ToString("MM/dd/yyyy"));

        // don't allow the app to be run after June 10th
        System.DateTime lastDay = new System.DateTime(2020, 6, 10);
        System.DateTime today = System.DateTime.Now;

        if (lastDay < today) {
            Debug.Log("quit the app");
            Application.Quit();
        }
        UnityEngine.SceneManagement.SceneManager.LoadScene("Welcome");
    }
}

-3
public static bool CompareDateTimes(this DateTime firstDate, DateTime secondDate) 
{
   return firstDate.Day == secondDate.Day && firstDate.Month == secondDate.Month && firstDate.Year == secondDate.Year;
}

4
.NET में, "तुलना" का अर्थ आमतौर पर "सापेक्ष तुलना" होता है न कि "समानता की जांच"। यहां प्रश्न सापेक्ष तुलना के बारे में था। इसके अतिरिक्त आपने कोड को ठीक से प्रारूपित करने का कोई प्रयास नहीं किया।
लास वी। कार्लसन जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.