2010-04-26 15 views
12

मैं है दो क्षेत्रों:तारों को परिवर्तित किए बिना सी # में दिनांक "स्ट्रिंग्स" की तुलना करने का कोई तरीका है?

string date1 = "04/26/10"; 
string date2 = "04/25/10"; 

मैं की तरह इन दो क्षेत्रों इतना ?:

if (date2 <= date1) 
{ 
    // perform some code here 
} 

यह पहली एक अलग तारीख प्रकार चर करने के लिए खेतों में परिवर्तित करने के बिना किया जा सकता है की तुलना कर सकते कैसे?

संपादित करें: मुझे यह उल्लेख करना चाहिए कि ये मान डेटाबेस तालिका से आ रहे हैं जहां दिनांक मान एक स्ट्रिंग प्रारूप में हैं। पुरानी विरासत कोड ...

उत्तर

33

नहीं, लेकिन सी # में किसी तारीख को परिवर्तित करना मुश्किल नहीं है।

if (DateTime.Parse(date2) <= DateTime.Parse(date1)) 

{ 
    // perform some code here 
} 
+0

हाँ, यह काफी आसान दिखता है। मैं सोच रहा था कि मुझे उनमें परिवर्तित तिथि मानों के साथ अलग-अलग चर होना होगा, लेकिन जिस तरह से आपने दिखाया है, वह मुझे उन अतिरिक्त चर के आसपास होने देता है। धन्यवाद! – Kevin

+1

@ केविन, बस अपनी संस्कृति सेटिंग्स से सावधान रहें - यदि आप किसी भिन्न संस्कृति (डिफ़ॉल्ट रूप से या दुर्घटना से) का उपयोग करके अमेरिकी दिनांक समय को परिवर्तित कर रहे हैं तो आप अप्रत्याशित परिणामों के साथ समाप्त हो सकते हैं :) – RYFN

+0

हेड-अप, ज़ीउस के लिए धन्यवाद ।कार्यक्रम सिर्फ एक छोटा बैच प्रोग्राम है जो हमारे सर्वर पर हर बार चल रहा होगा। यह मूल रूप से डेटाबेस तालिका को पढ़ेगा, दो स्ट्रिंग फ़ील्ड की तुलना करें (फ़ील्ड में मेरे प्रश्नों की तरह तिथियां हैं), और तुलना के आधार पर एक ही रिकॉर्ड पर एक और फ़ील्ड अपडेट करें। कार्यक्रम कभी भी देश के बाहर या किसी सर्वर पर कभी भी "अमेरिकी" पर सेट नहीं होने वाली संस्कृति सेटिंग्स के साथ चल रहा होगा। – Kevin

4

कम से कम आपको सही क्रम में तुलना करने के लिए तारों को अलग करने की आवश्यकता है।

आप उन्हें स्ट्रिंग के रूप में छोड़ने के लिए चाहते हैं, तो आप उन्हें सबसे बड़ा-> छोटी से छोटी इकाइयों के साथ पुन: व्यवस्थित करने की जरूरत है, तो यह:

yyyy/mm/dd 

सीधे तुलना की जा सकती है, लेकिन नहीं प्रारूप आपके पास। अपने प्रारूप के साथ, आपको इसे विभाजित करने की आवश्यकता है, और या तो इसे ऊपर की तरह पुन: संयोजित करें, या सही क्रम में अलग-अलग टुकड़ों की तुलना करें।

यह कहकर, DateTime.ParseExact का उपयोग कर तारों को डेटटाइम में परिवर्तित करना आसान है।

2

आम तौर पर तार की तुलना दिनांक की तुलना करना एक बुरा विचार है।

लेकिन यदि आपके तार एक ही प्रारूप में हैं (उदा। yyyy/mm/dd का मतलब वर्षों है, तो फिर दिन monthes) तो तुलना मान्य हो सकती है।

1

यह स्ट्रिंग मैनिपुलेशन के साथ किया जा सकता है, लेकिन यह पूर्णांक के तीन सेटों की प्रभावी ढंग से तुलना करने के लिए नीचे आ जाएगा, क्योंकि स्ट्रिंग्स डेटाटाइम्स में परिवर्तित होने से अधिक ओवरहेड प्रेरित करेंगे। आप ऐसा क्यों करना चाहते हो?

1

नहीं। नेट फ्रेमवर्क आपके लिए बाहर निकलने दें। यह उपयोगकर्ता दिनांक सेटिंग्स और प्रारूप (सिस्टम सेटिंग्स, वर्तमान धागे का उपयोग करके) की सही ढंग से पहचान करेगा और यह निर्धारित करेगा कि महीने, वर्ष और दिन कौन सा है - खासकर यदि वह डेटा एक एसक्यूएल सर्वर से आता है।

13

यदि आपकी तिथियां में डेटाबेस में स्ट्रिंग्स के रूप में संग्रहीत की जाती हैं, तो ऐसा लगता है कि आप यह सुनिश्चित नहीं कर सकते कि वे पार्सिंग से पहले एक वैध प्रारूप में होंगे। इसी कारण से मैं जेले के उत्तर पर एक छोटी भिन्नता का सुझाव दूंगा:

DateTime d1, d2; 
if (DateTime.TryParse(date1, out d1) && 
    DateTime.TryParse(date2, out d2) && 
    d2 <= d1) 
{ 
    // perform some code here 
} 
else 
{ 
    // strings didn't parse, but hey, 
    //at least you didn't throw an exception! 
} 
1

तुलना करने से पहले दिनांक स्वरूपित करना पसंद है। आपकी संस्कृतिइन्फो के आधार पर, दिनांकों की तुलना करने का सबसे सुरक्षित तरीका दिनांक स्ट्रिंग को "yyyy-mm-dd" में प्रारूपित करना है।

DateTime d1, d2; 
string date1 = "04/26/10"; 
string date2 = "04/25/10"; 
d1 = DateTime.Parse(date1.ToString("yyyy-MM-dd")); 
d2 = DateTime.Parse(date2.ToString("yyyy-MM-dd")); 
if (d1 > d2) 
{ 
     //do something 
} 
संबंधित मुद्दे

 संबंधित मुद्दे