首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimeSpan ToString格式

TimeSpan ToString格式
EN

Stack Overflow用户
提问于 2012-06-18 14:12:24
回答 7查看 75.4K关注 0票数 108

好奇的是,有没有格式字符串可以用来输出"5h 3m 30s“之类的东西?

例如:(显然是错误的)

代码语言:javascript
复制
myTimeSpan.ToString("hh mm ss")
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-06-18 14:13:49

尝试:

代码语言:javascript
复制
myTimeSpan.ToString("h'h 'm'm 's's'")

(请注意,即使是空格也需要加引号-这就是我第一次尝试时的错误所在。)

当然,我假设您使用的是.NET 4 --在此之前,TimeSpan不支持自定义格式字符串。

编辑:如上所述,这将不会超过24小时。还请注意,也可以通过Noda Time获得替代方案:)

票数 154
EN

Stack Overflow用户

发布于 2013-03-30 23:57:06

在使用Jon Skeet的答案时,请注意这一点,代码如下:

代码语言:javascript
复制
// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);

string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();

您会得到如下结果:

代码语言:javascript
复制
23h 24m 2s
3h 24m 2s

小时格式最多可显示23小时。它不会显示27小时,也不会将12天转换为小时,它只会将它们截断,就好像它们从未存在过一样。

解决这个问题的一种方法是创建一个扩展,它检查TimeSpan的长度,并根据时间跨度是否超过一年、一天等来创建格式。或者,您也可以简单地始终显示日期,因为它们不会中断:

代码语言:javascript
复制
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");

请注意,我是编程的初学者。这只来自观察,因为我很幸运地注意到了这一点,因为我假设它会显示所有小时。我这样说是因为我不知道是否有更好的解决方案,比如另一种可以显示无尽小时的小时格式。

然而,我确实认为这种格式正在发挥其预期的功能。你只需要意识到这一点。因此,这篇文章。Jon Skeet的回答从来没有指出这种格式只显示日期类型格式的小时属性,其中小时数最多可以是23。

票数 43
EN

Stack Overflow用户

发布于 2013-08-24 00:23:15

如果你很不幸没有使用.NET4:

代码语言:javascript
复制
string.Format("{0}h{1}m{2}s",
    myTimeSpan.Hours,
    myTimeSpan.Minutes,
    myTimeSpan.Seconds);
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11077711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档