टाइमस्पैन ToString प्रारूप


95

बस जिज्ञासु, वहाँ एक प्रारूप स्ट्रिंग मैं "5h 3m 30s" की तरह कुछ उत्पादन करने के लिए उपयोग कर सकता है?

जैसे। (स्पष्ट रूप से गलत)

myTimeSpan.ToString("hh mm ss")

जवाबों:


143

प्रयत्न:

myTimeSpan.ToString("h'h 'm'm 's's'")

(ध्यान दें कि यहां तक ​​कि रिक्त स्थान को उद्धृत करने की आवश्यकता है - यही मेरा पहला प्रयास गलत था।)

मैं मान रहा हूँ कि आप .NET 4 का उपयोग कर रहे हैं, निश्चित रूप से - इससे पहले, TimeSpanकस्टम प्रारूप के तार का समर्थन नहीं किया था।

संपादित करें: जैसा कि कहा गया है, यह 24 घंटे से आगे काम नहीं करेगा। यह भी ध्यान दें कि विकल्प नोडा टाइम के माध्यम से भी उपलब्ध हैं :)


5
आयाम का उत्तर देखें, क्योंकि यह 24 घंटे या उससे अधिक समय का सही प्रारूप नहीं देगा।
स्कॉट

"dd'd 'hh'h' mm'm '" - यह मेरे लिए काम करता है। इस बात पर ध्यान दें कि आपको एपॉस्ट्रॉफ़ के साथ स्वरूपित पाठ को लपेटने की आवश्यकता है: "dd'days बिताए '"। यहाँ dd डेटा की शांति है और 'अपने खुद के पाठ' के दिन बिताए हैं
Pavel Shkleinik

37

इस तरह के कोड के साथ, जॉन स्कीट के उत्तर का उपयोग करते समय इसके बारे में अवगत रहें:

// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);

string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();

आपको ऐसे परिणाम मिलते हैं:

23h 24m 2s
3h 24m 2s

घंटे का प्रारूप अधिकतम 23 घंटे दिखा सकता है। यह 27 घंटे नहीं दिखाएगा या 12 दिनों को घंटों में बदल देगा, यह बस उन्हें काट देगा जैसे कि वे कभी अस्तित्व में नहीं थे।

इसे ठीक करने का एक तरीका यह होगा कि एक एक्सटेंशन बनाया जाए जो टाइमस्पैन की लंबाई की जांच करता है और अगर एक साल, दिन, एक्टन से अधिक समय है तो आधार पर फॉर्मेटिंग बनाता है। या आप हमेशा दिन के रूप में अच्छी तरह से दिखा सकते हैं क्योंकि वे कभी नहीं काटते हैं:

string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");

ध्यान दें मैं प्रोग्रामिंग में एक शुरुआत हूं। यह केवल टिप्पणियों से आ रहा है जब मैं भाग्यशाली था कि यह नोटिस करने के बाद पर्याप्त था कि यह सभी घंटे दिखाएगा। मैं यह इसलिए कह रहा हूं क्योंकि मुझे नहीं पता कि क्या कोई बेहतर समाधान है, जैसे एक और घंटे का प्रारूप जो अंतहीन घंटे प्रदर्शित कर सकता है।

हालाँकि मुझे लगता है कि यह प्रारूप अपनी इच्छित कार्यक्षमता कर रहा है। आपको बस इसके बारे में पता होना चाहिए। इस प्रकार यह पोस्ट। जॉन स्कीट के उत्तर ने कभी संकेत नहीं दिया कि यह प्रारूप केवल दिनांक प्रकार के प्रारूप की केवल घंटे की संपत्ति दिखाने के लिए है जहां घंटे अधिकतम 23 पर हो सकते हैं।


14
इसलिए आपके पास TotalHoursTimeSpan में आदि हैं। आप शायद यही चाहते थेMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
Aximili

17

यदि आप दुर्भाग्यशाली हैं कि आप .NET 4 का उपयोग नहीं कर रहे हैं:

string.Format("{0}h{1}m{2}s",
    myTimeSpan.Hours,
    myTimeSpan.Minutes,
    myTimeSpan.Seconds);

9
कोड के लिए> 24h का समर्थन करने की आवश्यकता है, यह समाधान TotalHoursअभी भी .net के नए संस्करणों में जाने का तरीका है।
कोडइन्चोस

1
मुझे वास्तव में यह बेहतर लगता है क्योंकि आप बस इस पर भरोसा कर सकते हैं।
क्रिस मैरिकिक

उपयोग करने से सावधान रहें TotalHours, क्योंकि यह एक है double, एक intजैसा नहीं Hoursहै, अर्थात यह घंटों के साथ-साथ पूरे घंटे के अंश दिखाएगा।
जिनीले

6

कैसे निष्कर्ष के बारे में:

String oTime = myTimeSpan.ToString("h") + "h " +
               myTimeSpan.ToString("m") + "m " +
               myTimeSpan.ToString("s") + "s "

अद्यतन 1:

आप इसे एकल बोली से बचा सकते हैं: h'h 'm'm 's's'


11
आप संयोजन का उपयोग करने के लिए जा रहे हैं, तो आप भी उपयोग कर सकते हैं Hours, Minutes, Secondsगुण IMO। मैं व्यक्तिगत रूप से बल्कि एक कस्टम प्रारूप स्ट्रिंग का उपयोग करूँगा, उद्धरण के बारे में जानने के बाद।
जॉन स्कीट


5

का उपयोग करते हुए Xamarinऔर .NET Portable 4.5यह केवल प्रारूप मैं यहाँ सभी अन्य उत्तर की कोशिश कर के बाद काम हो गया था:

timespan.ToString("hh':'mm':'ss");

अनिवार्य रूप से मैं :उन्हें छोड़ने के लिए एकल उद्धरणों में डाल रहा हूं ।


2

मुझे कभी-कभी रीगेक्स की तरह थोड़ा सा फ़ॉर्मेट स्ट्रिंग्स लगता है, जब मैं बाद में कोड पर वापस आता हूं, तो मैं बारीकियों को भूल गया हूं। इसलिए मैं निम्नलिखित के साथ गया हूं, जो मुझे दस्तावेज वापस भेजने की संभावना कम है:

string FormatTimeSpan(TimeSpan timeSpan) =>
    $"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";

स्ट्रिंग इंटरपोलेशन, C # 6 में पेश किया गया है, इससे यह बहुत साफ हो जाता है कि यह अन्यथा होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.