代码之家  ›  专栏  ›  技术社区  ›  SuperJMN

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

  •  0
  • SuperJMN  · 技术社区  · 6 年前

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

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

    例如,如果 时间跨度

    • 12天,5小时,42分钟,15秒

    我想格式化为“12天”

    如果 时间跨度

    • 5小时3分钟

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

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

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   mklement0    6 年前

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

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