2009-09-07 27 views
30

क्या पूरे एप्लिकेशन के लिए डिफ़ॉल्ट दिनांक समय प्रारूप को सेट या ओवरराइड करने का कोई तरीका है। मैं सी # नेट एमवीसी 1.0 में एक ऐप लिख रहा हूं और जेनेरिक और प्रतिबिंब के बहुत सारे उपयोग करता हूं। अगर मैं डिफ़ॉल्ट डेटटाइम को ओवरराइड कर सकता हूं तो बहुत आसान होगा। टॉस्ट्रिंग() प्रारूप "डीडी-एमएमएम-वाईय" होना चाहिए। मैं नहीं चाहता कि यह प्रारूप अलग-अलग मशीन पर चलने पर यह प्रारूप बदल जाए।डिफ़ॉल्ट दिनांकटाइम प्रारूप सेट करें C#

संपादित करें - बस स्पष्ट करने के लिए मेरा मतलब है कि विशेष रूप से ToString को कॉल करना, कुछ अन्य एक्सटेंशन फ़ंक्शन नहीं, यह प्रतिबिंब/जेनरेट कोड के कारण है। ToString आउटपुट को बस बदलना आसान होगा।

उत्तर

42

एक datetime की "डिफ़ॉल्ट प्रारूप" है:

ShortDatePattern + ' ' + LongTimePattern 

कम से कम वर्तमान mono implementation में। इस मामले में विशेष रूप से दर्दनाक है आप 2001-02-03T04 की तरह कुछ प्रदर्शित करना चाहते हैं: 05: 06Z यानी दिनांक और समय ISO 8606 में विनिर्दिष्ट है, लेकिन संयुक्त नहीं आपके मामले में एक बड़ी समस्या:

using System; 
using System.Globalization; 
using System.Threading; 

namespace test { 
    public static class Program { 
     public static void Main() { 
      CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
      culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy"; 
      culture.DateTimeFormat.LongTimePattern = ""; 
      Thread.CurrentThread.CurrentCulture = culture; 
      Console.WriteLine(DateTime.Now); 
     } 
    } 
} 

यह आपके द्वारा अपेक्षित प्रारूप को वापस करने के लिए डेटाटाइम पर ToString का डिफ़ॉल्ट व्यवहार सेट करेगा।

+1

उत्तर के लिए धन्यवाद, इस कोड को .NET MVC 1.0 प्रोजेक्ट में कहां रखा जाना चाहिए, मैंने दृश्य में प्रयास किया है और यह काम करता है, लेकिन global.asax –

+1

में आपका क्या मतलब है "दृश्य में" ? और आपने ग्लोबल.एक्सएक्स में क्या किया? –

+1

यदि मैंने <% संस्कृतिइन्फो संस्कृति = (संस्कृतिइन्फो) CultureInfo.CurrentCulture.Clone(); संस्कृति। डेटटाइमफॉर्मैट। शॉर्टडेट पैटर्न = "डीडी-एमएमएम-वाईय"; संस्कृति। डेटटाइमफॉर्मैट।LongTimePattern = ""; थ्रेड। कंटेंट थ्रेड। कंटेंटकल्चर = संस्कृति; %> दृश्य के शीर्ष पर यह पृष्ठ पर सभी दिनांक समय को सही तरीके से स्वरूपित करता है। हालांकि जब मैं उस कोड को global.asax के Application_Start में डालता हूं तो यह काम नहीं करता है। मुझे लगता है कि आईआईएस में अनुरोधों के एकाधिक थ्रेडिंग के साथ यह करना है। इस कोड को मेरी पूरी साइट को प्रभावित करने के लिए सबसे अच्छी जगह कहां है। –

0

आप इस तरह की एक ExtensionMethod लिख सकते हैं:

public static string ToMyString(this DateTime dateTime) 
{ 
    return dateTime.ToString("needed format"); 
} 
6

यह आपके आवेदन के स्थानीयकरण-सेटिंग्स पर निर्भर है। सही प्रारूप प्राप्त करने के लिए Change that accordingly

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

public static string ToMyDateTime(this DateTime dateTime) { 
    return dateTime.ToString("dd-MMMM-yy"); 
} 
1

DateTime.ToString() कस्टम प्रारूप ShortDatePattern और DateTimeFormatInfo की LongTimePattern गुण द्वारा लौटाए गए तार को जोड़ती है। आप इन पैटर्न को DateTimeFormatInfo.CurrentInfo में निर्दिष्ट कर सकते हैं।

मैंने कभी यह स्वयं नहीं किया है।

0

मुझे यकीन नहीं है कि यह एक वेब ऐप के लिए काम करेगा, लेकिन आप वर्तमान संस्कृति के लिए DateTimeFormat संपत्ति सेट करने का प्रयास कर सकते हैं।

this और विशेष रूप से this देखें।

1

यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी संस्कृति वही रहती है, तो बस परेशानियों से बचने के लिए इसे स्वयं सेट करें।

System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("nl-BE"); 
System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 

उपरोक्त उदाहरण धागे की संस्कृति बेल्जियम-डच में सेट करता है।

वर्तमान संस्कृति सभी तारीख और समय प्रबंधन और वर्तमान यूआईसील्चर संसाधनों जैसे UI स्थानीयकरण को संभालती है।

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