首页 > 解决方案 > 格式化 TimeSpan 以仅显示相关的时间单位

问题描述

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

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

例如,如果TimeSpan

我想格式化为“12天”

如果TimeSpan

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

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

有没有标准化的方法来做到这一点?

标签: c#.netdatetimespan

解决方案


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

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

推荐阅读