格式化 TimeSpan 以仅显示相关的时间单位
Formatting TimeSpan to show only the relevant time unit
我的申请显示预计完成时间 (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());
我的申请显示预计完成时间 (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());