2011-05-01 10 views
12

क्या कोई साधारण स्ट्रिंग प्रारूप है जो दशमलव का घंटों और घंटों के अंशों का प्रतिनिधित्व करेगा और इसे घंटे और मिनट के रूप में दिखाएगा?सी # स्ट्रिंग प्रारूप दशमलव से 0 घंटे और मिनटों के लिए

उदाहरण के लिए: 5.5 घंटे 5 मिनट 30 मिनट प्रदर्शित करने के लिए प्रारूपित।

मैं कोड अपने आप को लिखने के लिए खुश हूँ, हालांकि मौजूदा कार्यक्षमता का उपयोग करने, अगर यह उपलब्ध

उत्तर

25
decimal t = 5.5M; 
Console.WriteLine(TimeSpan.FromHours((double)t).ToString()); 

है पसंद करेंगे कि आप "05:30:00" जो बहुत करीब है दे देंगे। तब आप उस स्वरूपित सकता है अपना इच्छित परिणाम के लिए:

var ts = TimeSpan.FromHours((double)t); 
Console.WriteLine("{0} hrs {1} minutes", ts.Hours, ts.Minutes); 

नोट दोगुना करने के लिए दशमलव से रूपांतरण में सटीकता के नुकसान के लिए एक संभावित है कि वहाँ है, लेकिन मुझे नहीं लगता कि यह मिनट पैमाने पर ध्यान देने योग्य हो जाएगा। किसी प्रकार की स्कीट जैसी समझ प्रणाली के साथ किसी को यहां झुकने में सक्षम हो सकता है।

+1

अच्छा, मैं TimeSpan का उपयोग करने का नहीं सोचा था कि (मैं शायद हालांकि होनी चाहिए :))। मैंने मिनटों को छुपाने के लिए थोड़ा और स्वरूपण जोड़ा, यदि वे 0 थे: स्ट्रिंग। फोर्मेट ("{0} बजे {1}", टी। हॉर्स, टी। मिनट> 0? स्ट्रिंग। फोर्मेट ("{0}", ts मिनट): ""); – johnc

+0

हाँ अच्छा विचार। मैंने मानव-पठनीय समय अवधि प्राप्त करने के लिए रिपोर्टिंग सेवा रिपोर्ट में टाइमस्पेन का भी उपयोग किया है। यह एक महान चाल है। –

+0

यदि आपके पास टाइमपैन> 24 घंटे हैं तो दूसरा उदाहरण टालना है। – Matthieu

1

मैट की टिप्पणी के आधार पर मैंने इसके लिए कुछ छोटे सहायक तरीकों को लिखा। किसी के लिए इसे लिखने के लिए उपयोगी हो सकता है।

/// <summary>Converts a decimal e.g. 1.5 to 1 hour 30 minutes</summary> 
/// <param name="duration">The time to convert as a double</param> 
/// <returns> 
///  Returns a string in format: 
///  x hours x minutes 
///  x hours (if there's no minutes) 
///  x minutes (if there's no hours) 
///  Will also pluralise the words if required e.g. 1 hour or 3 hours 
/// </returns> 
public String convertDecimalToHoursMinutes(double time) 
{ 
    TimeSpan timespan = TimeSpan.FromHours(time); 
    int hours = timespan.Hours; 
    int mins = timespan.Minutes; 

    // Convert to hours and minutes 
    String hourString = (hours > 0) ? string.Format("{0} " + pluraliseTime(hours, "hour"), hours) : ""; 
    String minString = (mins > 0) ? string.Format("{0} " + pluraliseTime(mins, "minute"), mins) : ""; 

    // Add a space between the hours and minutes if necessary 
    return (hours > 0 && mins > 0) ? hourString + " " + minString : hourString + minString; 
} 

/// <summary>Pluralise hour or minutes based on the amount of time</summary> 
/// <param name="num">The number of hours or minutes</param> 
/// <param name="word">The word to pluralise e.g. "hour" or "minute"</param> 
/// <returns> Returns correct English pluralisation e.g. 3 hours, 1 minute, 0 minutes</returns> 
public String pluraliseTime(int num, String word) 
{ 
    return (num == 0 || num > 1) ? word + "s" : word; 
} 
+0

समय> 24 घंटे काम नहीं करेगा। – Matthieu

0

आप समय है कि 24 घंटे से अधिक हो सकता है है, तो आप पर विचार करना उस समय कक्षा एक दिन संपत्ति है, और घंटे संपत्ति चक्र होगा। कुछ इस तरह 24 घंटे से अधिक के साथ समय से किसी भी त्रुटि नहीं कर पाएगा:

var tsExample = TimeSpan.FromHours(timeInDecimal); 
var result = $"{tsExample.Hours + (tsExample.Days * 24):00}:{tsExample.Minutes:00}"; 
संबंधित मुद्दे