格式化TimeSpan以仅显示相关的时间单位

时间:2018-07-20 12:45:14

标签: c# .net date timespan

我的应用程序显示了估计的完成时间(ETA)。

我不想为用户提供完全格式化的TimeSpan,而是仅显示最相关的单位。用户不想看到 0:00:39,766

例如,如果TimeSpan

  • 12天5小时42分钟15秒

我希望被格式化为“ 12天”

如果TimeSpan

  • 5小时3分钟

它仅应显示“ 5小时”,因为小时数与分钟数相比,使分钟数无关紧要。

几分钟也一样。 15分钟15分钟3秒的格式应相同。

是否有标准化的方法?

1 个答案:

答案 0 :(得分:4)

没有标准方式,但是您可以实现扩展方法

 public static partial class TimeSpanExtensions {
   public static string ToMyFormat(this TimeSpan ts) {
     return ts.Days != 0 ? $"{ts.Days} days"
          : ts.Hours != 0 ? $"{ts.Hours} hours"
          : ts.Minutes != 0 ? $"{ts.Minutes} minutes"
          : ts.Seconds != 0 ? $"{ts.Seconds} seconds"
          : $"{ts.Milliseconds} milliseconds";
   }
 }

然后使用它:

 TimeSpan test = new TimeSpan(0, 415, 48, 44, 452);

 // 17 days (415 = 17 * 24 + 7 - 17 days 7 hours)
 Console.Write(ts.ToMyFormat());