जवाबों:
प्रयत्न:
myTimeSpan.ToString("h'h 'm'm 's's'")
(ध्यान दें कि यहां तक कि रिक्त स्थान को उद्धृत करने की आवश्यकता है - यही मेरा पहला प्रयास गलत था।)
मैं मान रहा हूँ कि आप .NET 4 का उपयोग कर रहे हैं, निश्चित रूप से - इससे पहले, TimeSpanकस्टम प्रारूप के तार का समर्थन नहीं किया था।
संपादित करें: जैसा कि कहा गया है, यह 24 घंटे से आगे काम नहीं करेगा। यह भी ध्यान दें कि विकल्प नोडा टाइम के माध्यम से भी उपलब्ध हैं :)
इस तरह के कोड के साथ, जॉन स्कीट के उत्तर का उपयोग करते समय इसके बारे में अवगत रहें:
// 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 पर हो सकते हैं।
TotalHoursTimeSpan में आदि हैं। आप शायद यही चाहते थेMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
यदि आप दुर्भाग्यशाली हैं कि आप .NET 4 का उपयोग नहीं कर रहे हैं:
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHoursअभी भी .net के नए संस्करणों में जाने का तरीका है।
TotalHours, क्योंकि यह एक है double, एक intजैसा नहीं Hoursहै, अर्थात यह घंटों के साथ-साथ पूरे घंटे के अंश दिखाएगा।
कैसे निष्कर्ष के बारे में:
String oTime = myTimeSpan.ToString("h") + "h " +
myTimeSpan.ToString("m") + "m " +
myTimeSpan.ToString("s") + "s "
अद्यतन 1:
आप इसे एकल बोली से बचा सकते हैं: h'h 'm'm 's's'
Hours, Minutes, Secondsगुण IMO। मैं व्यक्तिगत रूप से बल्कि एक कस्टम प्रारूप स्ट्रिंग का उपयोग करूँगा, उद्धरण के बारे में जानने के बाद।
पार्स और रिवर्स बैक के लिए यह छोटा कोड मदद करता है:
var t = TimeSpan.FromMilliseconds(450780);
double d1 = t.TotalSeconds;
string t3 = t.ToString(@"hh\:mm\:ss\.f",null);
var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null);
double d2 = tt.TotalSeconds;
का उपयोग करते हुए Xamarinऔर .NET Portable 4.5यह केवल प्रारूप मैं यहाँ सभी अन्य उत्तर की कोशिश कर के बाद काम हो गया था:
timespan.ToString("hh':'mm':'ss");
अनिवार्य रूप से मैं :उन्हें छोड़ने के लिए एकल उद्धरणों में डाल रहा हूं ।
मुझे कभी-कभी रीगेक्स की तरह थोड़ा सा फ़ॉर्मेट स्ट्रिंग्स लगता है, जब मैं बाद में कोड पर वापस आता हूं, तो मैं बारीकियों को भूल गया हूं। इसलिए मैं निम्नलिखित के साथ गया हूं, जो मुझे दस्तावेज वापस भेजने की संभावना कम है:
string FormatTimeSpan(TimeSpan timeSpan) =>
$"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";
स्ट्रिंग इंटरपोलेशन, C # 6 में पेश किया गया है, इससे यह बहुत साफ हो जाता है कि यह अन्यथा होगा।