输入此问题的标题将我带到 this question .我正在寻找同样的东西,但如果你明白我的意思,可能不是静态格式的东西?
我正在编写一个快速程序,它将获取两个 DateTime 对象的 TimeSpan 持续时间并将它们输出以打印到纸上。
首选的格式是:XX 天,YY 小时,ZZ 分钟
(秒无关;天也是如此,因为我不希望时间跨度包含超过几个小时)。
说出下面的代码(例如):
DateTime start = DateTime.Now;
DateTime end = DateTime.Now.AddMinutes(135);
TimeSpan duration = (end - start);
// output duration as XX hours, YY minutes
谢谢,
扎克
附:我也遇到过“PrettyTime.NET”,但它会输出诸如“3 天前”之类的内容。我在 google 上找到的所有其他主题都可以像上面的示例那样格式化持续时间字符串,这让我找到了一个基于 Java 的解决方案。 :\
2014-09-08 更新:
3 年后跟进,我在 NuGet 和 Github 上发现了一个很棒的库,名为“Humanizer”,它可以解决我遇到的这个问题。我用的不多,但我确实试过了,效果很好。虽然它是一个相当大的库(它会为您的项目的构建路径发出大量用于不同文化的文件夹(我相信有一种方法可以自定义它)。
如果你关心复数:
public static string ToPrettyFormat(this TimeSpan span) {
if (span == TimeSpan.Zero) return "0 minutes";
var sb = new StringBuilder();
if (span.Days > 0)
sb.AppendFormat("{0} day{1} ", span.Days, span.Days > 1 ? "s" : String.Empty);
if (span.Hours > 0)
sb.AppendFormat("{0} hour{1} ", span.Hours, span.Hours > 1 ? "s" : String.Empty);
if (span.Minutes > 0)
sb.AppendFormat("{0} minute{1} ", span.Minutes, span.Minutes > 1 ? "s" : String.Empty);
return sb.ToString();
}
我是一名优秀的程序员,十分优秀!