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

Formatting TimeSpan to show only the relevant time unit

我的申请显示预计完成时间 (ETA)。

我不想给用户一个完全格式化的 TimeSpan,而是只显示最相关的单元。用户不想看到 0:00:39,766.

例如,如果 TimeSpan

我希望格式为“12 天”

如果 TimeSpan

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

分钟相同。 15 分和 15 分 3 秒的格式应该相同。

有标准化的方法吗?

没有标准方法,但您可以实施扩展方法

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