2008-11-25 14 views
16

यह सुनिश्चित नहीं है कि यहां क्या हो रहा है।स्ट्रिंग.फॉर्मेट (प्रारूप, दिनांक) प्रारूप को अनदेखा कर रहा है

मैं दिनांक समय वस्तु है, और जब मैं कोशिश:

String.Format("{0:dd/MM/yyyy}", _date) 

दिए गए मान है:

"24-05-1967" 

मैं क्या चाहता हूँ

"24/05/1967" 

किसी को भी व्याख्या कर सकते हैं क्यों है मेरी प्रारूप स्ट्रिंग को नजरअंदाज किया जा रहा है?

थोड़ा और पृष्ठभूमि: यह एक वेब ऐप है जिसने जीवन 1.1 के रूप में शुरू किया है, और मैं इसे 2.0/3.5 तक ले जाने की प्रक्रिया में हूं।

अद्यतन:

अगर मैं करने के लिए {0: dd: MM: yyyy} स्वरूप बदलने के लिए, यह रिटर्न 24: 05: 1967 - चार - यह प्रारूप स्ट्रिंग के लिए बदल जाती है कि में केवल/है।


समाधान:

2.0 अंतर्गत चलाने के लिए एप्लिकेशन अपडेट करते समय, asp.net भूमंडलीकरण सेटिंग्स में गड़बड़ कर रहे थे।

वेब साइट गुणों से, एएसपी.नेट टैब, कॉन्फ़िगरेशन संपादित करें, एप्लिकेशन टैब - संस्कृति और यूआई संस्कृति दोनों कुछ विचित्र कारणों से सूची में पहले आइटम (af-ZA) पर सेट की गई थीं।

उत्तर

24

/वास्तव में आपकी विशिष्ट संस्कृति के लिए दिनांक विभाजक है जो दूसरे शब्दों में, प्रारूप स्ट्रिंग को अनदेखा नहीं किया जाता है लेकिन वास्तव में सही ढंग से उपयोग किया जाता है । क्या CultureInfo चल धागा साथ जुड़ा हुआ है को देखो:

System.Threading.Thread.CurrentThread.CurrentCulture 

आप कोशिश अगर यह:

String.Format(new CultureInfo("en-US"), "{0:dd/MM/yyyy}", DateTime.Now); 

के बाद से है कि en-US के लिए सही विभाजक है आप तारीख/के साथ स्वरूपित मिल जाएगा। क्या आप शायद करना चाहिए लघु दिनांक स्वरूप स्ट्रिंग का उपयोग करें और सुनिश्चित करें धागा उचित जुड़े संस्कृति है कि बनाने के है, तो यह आप क्या चाहते हैं आप प्राप्त होगा और यह एक वैश्विक आवेदन में रूप में अच्छी तरह से काम करेगा:

DateTime.Now.ToString("d", Thread.CurrentThread.CurrentCulture); 

उम्मीद है की यह मदद करेगा!

+0

+1 याद रखने के लिए कि '/' संस्कृति के लिए परिवर्तित किया गया है और 'डी' शॉर्ट डेट स्ट्रिंग विनिर्देशक को इंगित करना बेहतर हो सकता है :) – Nij

9

संभवतः आप स्ट्रिंग प्रस्तुति प्राप्त करने के लिए ToString() अपनी डेटटाइम ऑब्जेक्ट का उपयोग करना चाहते हैं। "डीडी '/' एमएम '/' yyyy ' की प्रारूप स्ट्रिंग आपको आपके द्वारा वर्णित प्रारूप प्रदान करेगी। ध्यान दें कि आपको सिंगल कोट्स का उपयोग करके प्रारूप स्ट्रिंग में शाब्दिक वर्णों से बचने की आवश्यकता है।

उदाहरण: DateTime.Now.ToString("dd'/'MM'/'yyyy");

+0

धन्यवाद कि काम करता है - मुझे लगता है कि नहीं है कि आप जानते हैं कि जब यह (1.1 और 3.5 के बीच) बदल गया है और जहां यह दस्तावेज़ीकरण किया गया है: आसानी से हमेशा उपयोग आगे स्लैश करने के लिए इसे मजबूर कर सकते हैं? – chris

+0

देखें .NET Framework 3.5: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx (.NET 3.5) और .NET Framework 1.1: http://msdn.microsoft.com/en-us विवरण के लिए /library/8kb3ddd4(VS.71).aspx (.NET 1.1)। यह एपीआई कस्टम डेटटाइम प्रारूप तारों के लिए परिवर्तित नहीं होता है। – Oppositional

0

कि अजीब है। वह स्वरूपण मेरे लिए सही तरीके से काम करता है। आप _date.ToString ("dd/MM/yyyy") को आजमा सकते हैं (हालांकि यह अंधेरे में सिर्फ एक शॉट है)।

0

क्षेत्रीय सेटिंग्स (वेब ​​सर्वर पर?) की तिथि डिलीमीटर '-' पर सेट है। मेरे लोकेल (ईई) आउटपुट में "24.05.1 9 67" :)

1

जब तक आप IFormatProvider (आमतौर पर एक संस्कृतिइन्फो ऑब्जेक्ट) निर्दिष्ट नहीं करते हैं, तो यह डिफ़ॉल्ट रूप से Thread.CurrentThread.CurrentCulture की दिनांक/समय स्वरूपण का उपयोग करेगा, जो आपको बदलते परिणाम देगा।

और हाँ, यह बदल जाएगा/लेकिन नहीं:।

इस मामले में समाधान इस तरह, प्रारूप प्रदाता निर्दिष्ट करने के लिए है:

String.Format(CultureInfo.InvariantCulture, "{0:dd/MM/yyyy}", _date) 
1

"/" वर्ण दिनांक समय विभाजक वर्ण जो क्षेत्रीय सेटिंग्स में परिभाषित किया गया है के लिए संस्कृति तटस्थ प्लेसहोल्डर है। तो समय के लिए चरित्र ":" है।

"/" शब्दशः एम्बेड करने के लिए और प्लेसहोल्डर के रूप में आपको प्रारूप स्ट्रिंग में एकल उद्धरण चिह्न '/' में संलग्न करने की आवश्यकता नहीं है।

0

यह आपको अपनी आवश्यकता उत्पादन

String.Format("{0:dd/MM/yyyy}", Convert.ToDateTime(_date)); 
0

दिलचस्प धागा दे देंगे!

मेरे पास एक ऐसा एप्लिकेशन है जो एक्सेल फ़ाइल में पढ़ता है, और उपयोगकर्ता को उपयोगकर्ता परिभाषित प्रारूप में एक .csv फ़ाइल में इसका डेटा निर्यात करने देता है।

मैं विशेष रूप से उपयोगकर्ताओं को अपने लैपटॉप की संस्कृति जानकारी के बावजूद, yyyy/mm/dd जैसे प्रारूपों को निर्यात करने की क्षमता देना चाहता हूं।

मैं इन सुझावों में से कुछ करने की कोशिश की, लेकिन केवल एक जो काम किया है पॉप Catalin के सुझाव था, अक्षर लोप के साथ किसी भी/पात्रों रैप करने के लिए:

outputFormat = outputFormat.Replace("/", "'/'"); 
valueToExport = ImportedDate.ToString(outputFormat); 

यह केवल तरह से मजबूर करने के लिए हो रहा है कुछ विशिष्ट करने की कोशिश किए बिना, सटीक स्वरूप स्ट्रिंग का उपयोग करने के लिए ToString()।

अद्यतन

मैं हमेशा यह मनोरंजक जब मैं एक StackOverflow सवाल का जवाब मिल जाए, तो ही बग कुछ साल बाद मारा, और अपने खुद के जवाब को भूल गए हैं!

जैसा कि इन उत्तरों में से कई में बताया गया है, समाधान संस्कृति सेटिंग्स को अनदेखा करने के लिए ToString() को मजबूर करने के लिए एस्ट्रोफ़ेस में आगे-स्लैश वर्णों को लपेटना है।

तो, यदि आपकी संस्कृति सेटिंग्स में डेट विभाजक चरित्र (उदाहरण के लिए "20.07.2015") के रूप में पूर्ण-स्टॉप वर्ण है, तो क्रिसमस दिवस की तारीख को अच्छी तरह से प्रारूपित करने का प्रयास करते समय, आप यहां क्या देखते हैं, और आप कैसे हैं ,

DateTime dtChristmas = new DateTime(2015, 12, 31); 

// This might return "31/12/2015", "31.12.2015", etc, depending on Culture settings 
string str1 = dtChristmas.ToString("dd/MM/yyyy"); 

// ...but these two statements will both *always* return "31/12/2015" 
string str2 = dtChristmas.ToString("dd'/'MM'/'yyyy"); 
string str3 = dtChristmas.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); 
संबंधित मुद्दे