c# - TimeSpan 的自定义字符串格式

标签 c# .net timespan date-format

我想用这种方式在 C# 中格式化 TimeSpans:

xxx 天 yyy 小时 zzz 分钟

条件:

  1. 应该截断多余的秒数

  2. day(s) 是我想要的最大单位。我希望 34 天显示为 34 天而不是 1 个月 4 天等。

  3. 如果时间跨度小于一天,我不希望显示日期部分。同样,如果跨度小于 1 小时,我只希望显示分钟部分。

有没有什么方法可以使用内置格式字符串来实现,或者除了编写我自己的函数之外别无他法?

编辑:目前为此使用我自己的函数。它需要以分钟为单位的 TimeSpan 作为输入 (TimeSpan.TotalMinutes) :

private static string GetTimeStringFromMinutes(double p)
        {
            var minutes = (int) p;
            int hours = minutes / 60;
            minutes = minutes % 60;
            int days = hours/24;
            hours = hours%24;
            string dayPart = days + " day(s) ";
            string hoursPart = hours + " hour(s) ";
            string minutesPart = minutes + " minute(s)";
            if (days != 0)
                return (dayPart + hoursPart + minutesPart);
            if (hours != 0)
                return (hoursPart + minutesPart);
            return (minutesPart);
        }

最佳答案

TimeSpan 在 .NET 4.0 之前根本没有格式化选项,您必须通过 Ticks 属性将其转换为 DateTime。尽管在 DateTime.String(format) 格式化选项中没有远程关闭,但您必须自己编写。

在 .NET 4.0 中,TimeSpan 获得了 ToString(format) 覆盖。描述了自定义格式化字符串 here .您的第三个要求将需要代码。

关于c# - TimeSpan 的自定义字符串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3529680/

相关文章:

c# - 从视频链接获取youtube或Vimeo视频ID

c# - MVC View 页面应在部分 View (AJAX) 加载时隐藏

.net - 覆盖 GetHashCode 的最佳算法是什么?

c# - 如何将 TimeSpan 格式化为几小时而不是几天

c# - 将 TimeSpan 值四舍五入为第一个整数

c# - "Search Pane"win 8 应用程序中找不到元素异常

c# - 使用 Linq 查询作为数据源的 ASP.NET GridView 分页

.net - 在 SQL Server 中执行 MDX 查询需要 2 秒,但通过 ADOMD 执行并检索数据需要 5 分钟

c# - 挂接到 HttpModule 中的 Application_Start

c# - 格式化 TimeSpan 对象始终显示 00 毫秒