c# - 格式化 TimeSpan 以仅显示相关的时间单位
问题描述
我的应用程序显示预计完成时间 (ETA)。
我不想给用户一个完全格式化的TimeSpan
,但只显示最相关的单元。用户不想看到0:00:39,766。
例如,如果TimeSpan
是
- 12天5小时42分15秒
我想格式化为“12天”
如果TimeSpan
是
- 5小时3分钟
它应该只显示“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());
推荐阅读
- java - BitTorrent,DHT,BEP42,计算我的 NodeId
- java - 字符串太大,无法使用 UTF-8 进行编码,而是写为“STRING_TOO_LARGE”
- typescript - Angular6错误:未捕获(承诺):TypeError:(中间值).map不是函数
- ios - 在不更改 BundleId 的情况下辞职 iOS 应用程序 .iPA 文件
- svg - 自定义标记的 SVG 折线
- javascript - 如何从 VueJs 中的 body 获取参数值?
- sql - 将两个不同查询的结果相加
- html - sqPaymentForm 不适用于 IOS 自动填充
- codenameone - 应用停止/恢复后将代号一组件保持在无效位置
- .net - .Net WebApi - CustomValidation 方法调用两次