WPF बाध्यकारी StringFormat लघु तिथि स्ट्रिंग


88

मैं WPF में शॉर्ट फॉर्मेट नाम के स्ट्रिंग प्रारूप का उपयोग करना चाहूंगा।

मैंने कुछ इस तरह की कोशिश की:

<TextBlock Text="{Binding Date, StringFormat='Short Date'}" />

यह कैसे करना है?

जवाबों:


176

इसे इस्तेमाल करे:

<TextBlock Text="{Binding PropertyPath, StringFormat=d}" />

जो कि संवेदनशील है और इसके लिए .NET 3.5 SP1 या इसके बाद के संस्करण की आवश्यकता है।

नोट: यह मामला संवेदनशील है। "डी" लघु तिथि प्रारूप निर्दिष्टकर्ता है जबकि "डी" लंबी तिथि प्रारूप निर्दिष्टकर्ता है

मानक तिथि और समय प्रारूप स्ट्रिंग पर MSDN पृष्ठ पर स्ट्रिंग प्रारूप की एक पूरी सूची है और सभी विकल्पों पर एक पूर्ण विवरण है इस MSDN ब्लॉग पोस्ट

हालांकि, इसके साथ एक गोच है - यह हमेशा यूएस प्रारूप में तारीख को आउटपुट करता है जब तक कि आप संस्कृति को सही मूल्य पर सेट न करें।

यदि आप इस गुण को सेट नहीं करते हैं, तो बाइंडिंग इंजन बाइंडिंग लक्ष्य ऑब्जेक्ट की भाषा गुण का उपयोग करता है । एक्सएएमएल में यह "एन-यूएस" के लिए डिफॉल्ट करता है या पृष्ठ के मूल तत्व (या किसी भी तत्व) से मूल्य विरासत में मिला है, अगर कोई स्पष्ट रूप से सेट किया गया है।

स्रोत

ऐसा करने का एक तरीका पीछे के कोड में है (यह मानकर कि आपने थ्रेड की संस्कृति को सही मान पर सेट किया है):

this.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);

दूसरा तरीका बंधन में कनवर्टर संस्कृति को सेट करना है:

<TextBlock Text="{Binding PropertyPath, StringFormat=d, ConverterCulture=en-GB}" />

हालांकि यह आपको आउटपुट को स्थानीय बनाने की अनुमति नहीं देता है।


धन्यवाद! आपको यह मिला! जब मैंने पूछा कि मेरे मन में था कि शॉर्ट डेट स्ट्रिंग प्रारूप क्या है, तो मैं स्ट्रिंग स्वरूपों की सूची कहां पा सकता हूं, और मुझे यह भी पसंद है कि आपने स्ट्रिंगरफॉर्म = डी के साथ उत्तर दिया। बहुत स्पष्ट और पूर्ण।
टोनी

क्या यह हमेशा संस्कृति सेटिंग्स की परवाह किए बिना यूएस प्रारूप का उत्पादन करता है?
CRice

@Rice - हाँ यह करता है - किसी कारण के लिए - आप खुद को संस्कृति निर्धारित किया है।
ChrisF

1
धन्यवाद, बहुत बुरा है जब UI "d" एक ही दिनांक ऑब्जेक्ट के xaml.cs "d" के लिए अलग-अलग आउटपुट करता है।
CRice

WPF कल्चर बग को देखें, मैं सिर्फ इसे जोड़ता हूं। लैंग्वेज = System.Windows.Markup.XmlLanguage.GetLanguage (System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag); हर खिड़की में initializecomponent के बाद;
पेट्रीज

53

या अंग्रेजी के लिए इसका उपयोग करें (या कस्टम के लिए इसे मिलाएं) प्रारूप:

StringFormat='{}{0:dd/MM/yyyy}'

2
आप अपने बाइंडिंग में 'ConverterCulture =' का भी उपयोग कर सकते हैं - जिसे प्रारूप को दर्शाने के लिए एक मान की आवश्यकता होती है। (कनवर्टरकल्चर = 'एन-जीबी' ग्रेट ब्रिटेन है)।
वरना

यह समस्या के लिए सबसे अच्छा और सबसे आसान उत्तर है
स्टीवन

चीयर्स स्टीवन! मैंने कन्वर्टरकल्चर ऐड पर भी "जीत" जवाब को हरा दिया ... लेकिन ऐसा ही हो।
और

27

का प्रयोग करें StringFormatसंपत्ति (या ContentStringFormatपर ContentControlऔर उसके डेरिवेटिव, जैसे Label)।

<TextBlock Text="{Binding Date, StringFormat={}{0:d}}" />

ध्यान दें कि {}मानक String.Formatस्थितीय तर्क संकेतन से पहले ब्रेसिज़ को मार्कअप एक्सटेंशन भाषा में बच जाने की अनुमति देता है।


4
{}आप का उपयोग करने की अनुमति देगा StringFormat='{}Created Date:{0:d}'जो अन्यथा अप्रत्याशित परिणाम होगा।
ब्राउनिश मॉन्स्टर

12

कुछ DateTime StringFormat नमूने मुझे उपयोगी लगे। C # उदाहरणों से उठा

DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123);

String.Format("{0:y yy yyy yyyy}", dt);  // "8 08 008 2008"   year
String.Format("{0:M MM MMM MMMM}", dt);  // "3 03 Mar March"  month
String.Format("{0:d dd ddd dddd}", dt);  // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}",     dt);  // "4 04 16 16"      hour 12/24
String.Format("{0:m mm}",          dt);  // "5 05"            minute
String.Format("{0:s ss}",          dt);  // "7 07"            second
String.Format("{0:f ff fff ffff}", dt);  // "1 12 123 1230"   sec.fraction
String.Format("{0:F FF FFF FFFF}", dt);  // "1 12 123 123"    without zeroes
String.Format("{0:t tt}",          dt);  // "P PM"            A.M. or P.M.
String.Format("{0:z zz zzz}",      dt);  // "-6 -06 -06:00"   time zone

5

स्ट्रिंग प्रारूप के लिए एकल उद्धरण से अवगत रहें। यह काम नहीं करता है:

    Content="{Binding PlannedDateTime, StringFormat={}{0:yy.MM.dd HH:mm}}"

जबकि यह है:

    Content="{Binding PlannedDateTime, StringFormat='{}{0:yy.MM.dd HH:mm}'}"


4

यदि आप मूल्य के साथ एक स्ट्रिंग जोड़ना चाहते हैं तो इसका उपयोग करें:

<TextBlock Text="{Binding Date, StringFormat= 'Date : {0:d}'}" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.