c# - C# 中的 TimeSpan "pretty time"格式

输入此问题的标题将我带到 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();

}

关于c# - C# 中的 TimeSpan "pretty time"格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438363/

相关文章:

.net - 根据可用宽度和字体计算文本高度?

java - 如何格式化具有大参数列表的方法

python - 无法编码/解码 pprint 输出

asp.net-mvc - 使用 Razor View 引擎 - 如何将十进制值格式化为逗号和两位小

python - 打印十六进制值时如何让 Python 使用大写字母?

r - 在 R 绘图图例中添加 pch 符号

python - 并非所有参数都在字符串格式化期间转换

java - 在碧 Jade 报告中将字符串格式化为货币格式

excel - 如何防止自动截断 Excel 单元格中的前导零

formatting - 如何在 Spring MVC 3.0 中显示格式化的 DateTime?