C#字符串格式表示小数和小时的小时和分钟

是否有一个简单的字符串格式,它将采用小数表示小时和小时的分数,并将其显示为小时和分钟?

例如:5.5格式化显示5小时30分钟。

我很乐意自己编写代码,但如果可用的话,我更愿意使用现有的function

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); 

请注意,从十进制到双精度的转换可能会导致精度损失,但我不认为它在分钟刻度上会引人注意。 对类型系统有类似Skeet理解的人可能会在这里发出声音。

我根据Matt的评论为此写了一些小助手方法。 对于某人来说,保存您自己的写作可能会有用。

 /// Converts a decimal eg 1.5 to 1 hour 30 minutes /// The time to convert as a double ///  /// 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 eg 1 hour or 3 hours ///  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; } /// Pluralise hour or minutes based on the amount of time /// The number of hours or minutes /// The word to pluralise eg "hour" or "minute" ///  Returns correct English pluralisation eg 3 hours, 1 minute, 0 minutes public String pluraliseTime(int num, String word) { return (num == 0 || num > 1) ? word + "s" : word; } 

如果您的时间超过24小时,则必须考虑TimeSpan类具有Days属性,并且Hours属性将循环。 这样的事情可以防止超过24小时的任何错误:

  var tsExample = TimeSpan.FromHours(timeInDecimal); var result = $"{tsExample.Hours + (tsExample.Days * 24):00}:{tsExample.Minutes:00}";