2011-03-18 5 views
6

मुझे निम्नलिखित कोड के साथ एक बड़ी समस्या है:सी # तिथि घटक बग या मैं कुछ याद कर रहा हूँ?

DateTime date = DateTime.Now; 
String yearmonthday = date.ToString("yyyy/MM/dd"); 
MessageBox.Show(yearmonthday); 

समस्या यह है कि, सी # हमेशा निर्दिष्ट किए गए "/" का उपयोग करने के बजाय सिस्टम दिनांक विभाजक का उपयोग करता है। यदि मैं उस कोड को चलाता हूं, तो मुझे निम्न आउटपुट मिलता है:

2011/03/18 

लेकिन अगर मैं "नियंत्रण कक्ष" -> "क्षेत्रीय और भाषा विकल्प" पर जाता हूं और दिनांक विभाजक को "-" में बदलता हूं, तो मुझे

मिलता है
2011-03-18 

भले ही toString विधि में मैंने '/' का उपयोग करने के लिए निर्दिष्ट किया हो। क्या मुझे कुछ याद आ रहा है या यह एक सी #/नेट फ्रेमवर्क बग है?

उत्तर

5

/ आपकी प्रारूप स्ट्रिंग में a placeholder for the date separator है - जो व्यवहार आप देख रहे हैं वह डिज़ाइन और स्पष्ट रूप से प्रलेखित है।

आप एक शाब्दिक / फिर अपने प्रारूप स्ट्रिंग में you need to escape it है, जो तब "yyyy \/माह \/dd" कुछ ऐसा दिखाई देगा की जरूरत है या "yyyy '/' एम एम '/' dd"

5

इस तरह का प्रयास करें:

String yearmonthday = date.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture); 

या /

String yearmonthday = date.ToString(@"yyyy\/MM\/dd"); 
+0

ठीक है, अब यह काम करता है। बीटीडब्ल्यू, बेवकूफ लगता है कि अगर मैं स्ट्रिंग में इच्छित सटीक प्रारूप लिखता हूं तो मुझे यह निर्दिष्ट करना होगा ... – kaharas

+1

@kaharas, '/' प्रारूप में एक विशेष अर्थ है => यह वर्तमान संस्कृति के लिए दिनांक विभाजक का प्रतिनिधित्व करता है । –

+0

@ कहरस यह मेरे लिए भी बेवकूफ लगता है। मेरा जवाब देखें – Aliostad

2

InvariantCulture बचने चाल

String yearmonthday = DateTime.Now.ToString("yyyy/MM/dd",CultureInfo.InvariantCulture); 
1

आप बच सकते हैं है / चरित्र, क्योंकि यह तिथि सेपरा है टो, इस तरह:

var d = DateTime.Now; 
var s = d.ToString(@"yyyy\/MM\/dd"); 

इसके बारे में सब पढ़ें: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

1

इस डिजाइन से जाहिरा तौर पर है।

काम DateTimeFormat कहा जाता है आप FormatCustomized विधि में इस स्निपेट देख सकते हैं जो एक आंतरिक कक्षा में कार्यान्वित किया जाता है:

case '/': 
     { 
      outputBuffer.Append(dtfi.DateSeparator); 
      num2 = 1; 
      continue; 
     } 

तो यह DateSeparator साथ / बदल देता है।

3

समस्या यह है कि दिनांक चरित्र के लिए आरक्षित है - इसलिए यह एक बग नहीं है - यह एक विशेषता है जिसे इसे लोकेल के अनुसार व्याख्या किया जाता है।

साथ/चरित्र escpaing प्रयास करें:

var d = DateTime.Now; 
d.ToString("yy\\/mm\\/dd").Dump(); 
संबंधित मुद्दे