2010-03-16 9 views
38

मैं "[मिनट]: [सेकंड]" के प्रारूप में टाइमस्पेन तत्व को प्रारूपित करने का प्रयास कर रहा हूं। इस प्रारूप में, 2 मिनट और 8 सेकंड "02:08" की तरह दिखेगा। मैंने String.Format और ToString विधियों के साथ कई विकल्पों का प्रयास किया है, लेकिन मुझे एक प्रारूप अपवाद मिलता है। यही वह है जो मैं वर्तमान में कोशिश कर रहा हूं:सी # + प्रारूप समयस्पैन

DateTime startTime = DateTime.Now; 
// Do Stuff 
TimeSpan duration = DateTime.Now.Subtract(startTime); 

Console.WriteLine("[paragraph of information] Total Duration: " + duration.ToString("mm:ss")); 

मैं क्या गलत कर रहा हूं? मैं अपने वांछित प्रारूप का उपयोग कर टाइमस्पेन तत्व कैसे प्रारूपित करूं?

धन्यवाद

+0

संभावित डुप्लिकेट [मैं स्ट्रिंग कैसे कर सकता हूं। .NET में एक कस्टम प्रारूप के साथ एक टाइमस्पेन ऑब्जेक्ट को प्रारूपित करें?] (Http://stackoverflow.com/questions/574881/how-can-i-string-format-a- timespan-object-a-custom-format-in-net) –

उत्तर

41

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

Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds); 
+0

ओह, जब आप मेरा उत्तर लिख रहे थे तब आपने पोस्ट किया :) – Joel

+4

यह वास्तव में सही नहीं है, टाइम विभाजक संस्कृति संस्कृति में उपलब्ध संस्कृति संवेदनशील स्ट्रिंग है। DateTimeFormat.TimeSeparator। या DateTime.ToString() विधि का उपयोग करें। –

+1

@nobugz: मूल्यवान जानकारी के लिए धन्यवाद। ओपी ने स्पष्ट रूप से इस विशिष्ट प्रारूप का अनुरोध किया। –

6

दिनांक और समय प्रारूप तार केवल दिनांक समय और DateTimeOffset पर लागू होते हैं। यो एक सामान्य प्रारूप स्ट्रिंग, हालांकि उपयोग कर सकते हैं:

string.Format("{0}:{1:00}", Math.Truncate(duration.TotalMinutes), duration.Seconds) 

ध्यान दें कि यहां TotalMinutes का उपयोग कर सुनिश्चित करता है कि परिणाम अभी भी सही है, जब यह 60 मिनट से अधिक समय लगा।

50

नोट: यह उत्तर केवल .NET 4.0 पर लागू होता है।

पेट के चरित्र एक शाब्दिक है और एकल उद्धरण में लिपटे होने की जरूरत है:

duration.ToString("mm':'ss") 

MSDN documentation से:

कस्टम TimeSpan प्रारूप विनिर्देशक प्लेसहोल्डर विभाजक प्रतीकों शामिल नहीं है , जैसे प्रतीकों घंटों से अलग दिन, मिनट से घंटे, या आंशिकसे सेकंडसेकेंड। इसके बजाए, इन प्रतीकों को को स्ट्रिंग अक्षर के रूप में कस्टम प्रारूप स्ट्रिंग में शामिल किया जाना चाहिए।

+2

मेरे लिए काम नहीं करता है ... मुझे लगता है कि समस्या टाइमस्पेन है, डेटटाइम के लिए यह – tanascius

+0

'टाइमस्पैन' में 'ToString (string)' विधि नहीं है। – Joey

+0

@tanascius, @ जोहान्स रोस्सेल: मैंने अभी देखा है कि 'ToString (string) 'अधिभार केवल .NET4 में मौजूद है। ढांचे के पहले संस्करणों में केवल सादा 'ToString()' विधि होती है जो कोई पैरामीटर नहीं लेती है। – LukeH

2

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

DateTime startTime = DateTime.Now; 
// Do Stuff 
TimeSpan duration = DateTime.Now.Subtract(startTime); 

Console.WriteLine("[paragraph of information] Total Duration: " + duration.Minutes.ToString("00") + ":" + duration.Seconds.ToString("00")); 
0

आप हमेशा कर सकता है:

string.Format("{0}:{1}", duration.Minutes, duration.Seconds); 
+1

एक खाली प्रारूप स्ट्रिंग के साथ जो एक अच्छा, खाली परिणाम होगा ;-) – Joey

+0

हाँ, अच्छा बिंदु। :) फिर भी ठीक करने के लिए मुश्किल नहीं होगा। – Joel

+0

@ जोएल: और आप अपने उत्तर को संपादित करने और इसे सही करने के लिए भी परेशान नहीं हैं? वाह तुम बहादुर हो! ;) –

0

TimeSpan के ToString विधि का वर्णन इस MSDN पेज के आधार पर, मैं कुछ हद तक हैरान हूँ कि तुम भी संकलन कर सकते हैं उपरोक्त कोड टाइमस्पैन में ToString() अधिभार नहीं है जो केवल एक स्ट्रिंग स्वीकार करता है।

The article एक ऐसा फ़ंक्शन भी दिखाता है जिसे आप टाइमस्पैन स्वरूपित करने के लिए उपयोग कर सकते हैं और उपयोग कर सकते हैं।

+0

यदि ओपी .NET4 का उपयोग कर रहा है तो कोड संकलित होगा, लेकिन फिर वर्णन के रूप में एक रनटाइम 'FormatException' दबाएगा। – LukeH

16

कुछ रहस्यमय कारणों के लिए टाइमस्पैन को कभी भी ToString() अधिभार नहीं मिला जो .NET 4.0 तक स्वरूपण का समर्थन करता है। पहले के रिलीज के लिए, जब तक कि यह सकारात्मक है, तब तक आप DateTime.ToString() का अपहरण कर सकते हैं:

System.TimeSpan की
 TimeSpan ts = new TimeSpan(0, 2, 8); 
     string s = new DateTime(ts.Ticks).ToString("mm:ss"); 
+0

'टाइमस्पेन' के लिए 'ToString (string)' अधिभार .NET4 में उपलब्ध है। स्वीकृत उत्तर की तुलना में – LukeH

+1

बहुत अच्छा कोड। –

0
TimeSpan t = TimeSpan.Parse("13:45:43"); 
Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t)); 
+0

-1: आपका कोड 'FormatException' फेंकता है, क्योंकि 'टाइमस्पेन' में वर्षों या महीनों की कोई अवधारणा नहीं है। साथ ही, 'String.Format' पर कॉल 'कंसोल' के रूप में अनावश्यक है। राइटलाइन 'समग्र स्वरूपण का समर्थन करता है। [एमएसडीएन: कस्टम टाइमस्पैन प्रारूप] (https://msdn.microsoft.com/en-us/library/ee372287%28v=vs.110%29.aspx)। –

11

कस्टम स्वरूपण में जोड़ा गया है।नेट 4, इसलिए अब आप निम्न कर सकते हैं:

string.Format("{0:mm\\:ss}", myTimeSpan); 

(अपडेट) और यहाँ एक उदाहरण उपयोग कर रहा है सी # 6 स्ट्रिंग प्रक्षेप:

$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15 

संक्षेप में आप अब पलायन "करने की जरूरत है : "एक वर्ण के साथ चरित्र" \ "(जिसे आप तब तक बच जाना चाहिए जब तक कि आप वर्बैटिम स्ट्रिंग का उपयोग नहीं कर रहे हों)।

एमएसडीएन Custom TimeSpan Format Strings पृष्ठ से यह अंश ":" और "।" से बचने के बारे में बताता है। एक प्रारूप स्ट्रिंग में charecters:

कस्टम TimeSpan प्रारूप विनिर्देशक इस तरह के प्रतीक के रूप में प्लेसहोल्डर विभाजक प्रतीकों, शामिल नहीं हैं कि घंटे से अलग दिन, मिनट, या आंशिक सेकंड से सेकंड से घंटे। इसके बजाय, इन प्रतीकों को स्ट्रिंग अक्षर के रूप में कस्टम प्रारूप स्ट्रिंग में शामिल किया जाना चाहिए। उदाहरण के लिए, "dd.hh: mm" अवधि (।) को दिन और घंटों के बीच विभाजक के रूप में परिभाषित करता है, और एक कोलन (:) को विभाजक के रूप में घंटे और मिनट के बीच।

+1

उस उदाहरण को ढूंढना मुश्किल है जिसका उपयोग नहीं किया गया था। ToString() –

0

आप नीचे दिए गए कोड का उपयोग कर सकते हैं।

TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes); 
string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds); 

यह यानी 34:45 प्रारूप दिखाएगा।

आशा है कि यह आपकी मदद करेगा।

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