2012-10-02 9 views
7

मैं ऐसे ऐप पर काम कर रहा हूं जो दुनिया के कई देशों में देखा जा सकता है। ऐसे कई देश नहीं हैं जो कुछ अन्य के साथ घंटों, मिनट और सेकंड दिखाते हैं: एक सेपरेटर के रूप में, लेकिन कुछ हैं और मैं यह सुनिश्चित करना चाहता हूं कि समय उनके क्षेत्र के लिए सही ढंग से स्वरूपित हो। डेटटाइम इस पर बहुत अच्छा है लेकिन टाइमस्पेन नहीं है। ये स्निपेट विजुअल स्टूडियो 2010 में मेरे तत्काल विंडो से हैं, जिसका उपयोग मेरे क्षेत्र के साथ मलयालम (भारत) में किया गया है। डेटटाइम.अब कॉल यह भी दर्शाता है कि मेरी घड़ी, माइक्रोसॉफ्ट आउटलुक और अन्य क्षेत्रों पर समय कैसा दिखाया गया है।विभिन्न संस्कृतियों में स्वरूपण टाइमस्पेन

DateTime.Now.ToString() 
"02-10-12 17.00.58" 

http://msdn.microsoft.com/en-us/library/dd784379.aspx कहते हैं "अगर formatProvider रिक्त है, DateTimeFormatInfo उद्देश्य यह है कि वर्तमान संस्कृति से संबंधित है जो प्रयोग किया जाता है। अगर प्रारूप एक कस्टम प्रारूप स्ट्रिंग, formatProvider पैरामीटर पर ध्यान नहीं दिया जाता है।" इसका कारण यह है कि मुझे वर्तमान संस्कृति इन्फ्लो में भी पास करने की आवश्यकता नहीं है। मैं जिस प्रारूप में चाहता हूं वह है hh.mm.ss लेकिन obvioulsy hh: mm: ss जब अन्य भाषाओं में, और यदि अन्य अन्य संभावनाएं हैं, तो उन्हें स्वचालित रूप से उनको प्रतिबिंबित करना चाहिए - मूल रूप से टाइमस्पेन संस्कृति-जागरूक होना चाहिए, बस डेटटाइम के रूप में है।

हालांकि

:

timeRemaining.ToString() 
"00:02:09" 
timeRemaining.ToString("c") 
"00:02:09" 
timeRemaining.ToString("c", CultureInfo.CurrentCulture) 
"00:02:09" 
timeRemaining.ToString("g") 
"0:02:09" 
timeRemaining.ToString("G") 
"0:00:02:09.0000000" 
timeRemaining.ToString("t") 
"00:02:09" 
timeRemaining.ToString("g", CultureInfo.CurrentCulture) 
"0:02:09" 
timeRemaining.ToString("g", CultureInfo.CurrentUICulture) 
"0:02:09" 
timeRemaining.ToString("G", CultureInfo.CurrentUICulture) 
"0:00:02:09.0000000" 
timeRemaining.ToString("G", CultureInfo.CurrentCulture) 
"0:00:02:09.0000000" 
timeRemaining.ToString("t", CultureInfo.CurrentCulture) 
"00:02:09" 

मैं उत्पादन के लिए एक सरल, एकल पंक्ति एक संस्कृति-अवेयर ढंग से एक समयावधि के लिए देख रहा हूँ। किसी भी विचार की सराहना की जाती है।

उत्तर

4

एक बग की तरह दिखता है, तो आप connect.microsoft.com पर इसकी रिपोर्ट कर सकते हैं। इस बीच, डेटटाइम स्वरूपण का लाभ उठाने का एक कामकाज है। इस तरह:

using System; 
using System.Globalization; 

class Program { 
    static void Main(string[] args) { 
     var ci = CultureInfo.GetCultureInfo("ml-IN"); 
     System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
     var ts = new TimeSpan(0, 2, 9); 
     var dt = new DateTime(Math.Abs(ts.Ticks)); 
     Console.WriteLine(dt.ToString("HH:mm:ss")); 
     Console.ReadLine(); 
    } 
} 

आउटपुट:

00.02.09

+0

लेकिन यदि आप एक प्रारूप स्ट्रिंग का उपयोग करने जा रहे हैं तो एक बहुत ही सरल कामकाज 'ts.ToString (" h '।' Mm '।' Ss ")' है।.NET 4.0 के बाद से काम करता है। यह हार्ड-कोड पाठ्यक्रम की अवधि है। यदि आप संस्कृति के समय विभाजक का उपयोग करना चाहते हैं, तो इसे 'CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator' से पढ़ें, इसे एस्ट्रोफ़ेस के अंदर रखें और इसे 'h', 'mm' और' ss' के साथ प्रारूप स्ट्रिंग में उपयोग करें 'टाइमस्पेन'। –

+3

यह देखना मुश्किल है कि यह "सरल" कैसे है। यह निश्चित रूप से उस समय के साथ सटीक नहीं होगा जब समय प्रारूप ओवरराइड करता है जिसे उपयोगकर्ता नियंत्रण कक्ष में निर्दिष्ट करता है। –

1

यह और अधिक एक टिप्पणी की तरह है, लेकिन कुछ जगह की जरूरत है, तो मैं एक जवाब के रूप में लिखते हैं।

जबकि DateTime की स्ट्रिंग स्वरूपण बहुत लंबे समय तक .NET में रहा है, TimeSpan का स्वरूपण .NET 4.0 (विजुअल स्टूडियो 2010) में नया था।

एक संस्कृति एक DateTimeFormatInfo वस्तु जो DateTime द्वारा प्रयोग किया जाता है और क्या बृहदान्त्र : या अवधि . या घंटे, मिनट और सेकंड के बीच कुछ और उपयोग करने के लिए पर जानकारी भी शामिल किया जाता है। अब, TimeSpan इस DateTimeFormatInfo ऑब्जेक्ट का उपयोग प्रतीत नहीं होता है, और "टाइमस्पैनफॉर्मैटइन्फो" नामक कुछ भी नहीं है।

// we start from a non-read-only invariant culture 
Thread.CurrentThread.CurrentCulture = new CultureInfo(""); 

// change time separator of DateTime format info of the culture 
CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator = "<-->"; 

var dt = new DateTime(2013, 7, 8, 13, 14, 15); 
Console.WriteLine(dt); // writes "07/08/2013 13<-->14<-->15" 

var ts = new TimeSpan(13, 14, 15); 
Console.WriteLine(ts); // writes "13:14:15" 
1

मैं उत्पादन के लिए एक सरल, एकल पंक्ति एक संस्कृति-अवेयर ढंग से एक समयावधि के लिए देख रहा हूँ:

यहाँ एक उदाहरण है।

तो मुझे लगता है कि आप के लिए स्वरूपण करने के लिए DateTime वर्ग का उपयोग कर बंद सबसे अच्छा कर रहे हैं:

string display = new DateTime(timespan.Ticks).ToLongTimeString(); 

यह मानते हुए कि timespan के बीच 0 और 24 घंटे के लंबे समय से एक सकारात्मक अवधि रखती है।

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