TimeSpan ToString格式

只是好奇,有一个格式字符串,我可以用它来输出像“5h 3m 30s”?

只是好奇,有一个格式字符串,我可以用它来输出像“5h 3m 30s”?

(显然是错误的)

myTimeSpan.ToString("hh mm ss")
155

尝试:

myTimeSpan.ToString("h'h 'm'm 's's'")

(请注意,即使空格需要引用-这是我第一次尝试的错误。)

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

编辑:如前所述,这不会超过 24 小时工作。还要注意,替代品也可以通过Noda Time:)

45

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

// 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();

你会得到这样的结果:

23h 24m 2s
3h 24m 2s

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

解决这个问题的一种方法是创建一个扩展,检查 TimeSpan 的长度,并根据时间跨度是否超过xx年,天等创建格式。或者你可以简单地总是显示天,因为他们从来没有切断:

string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");

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

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

22

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

string.Format("{0}h{1}m{2}s",
    myTimeSpan.Hours,
    myTimeSpan.Minutes,
    myTimeSpan.Seconds);
18

使用Xamarin.NET Portable 4.5这是我在尝试所有其他答案后得到的唯一格式:

timespan.ToString("hh':'mm':'ss");

本质上,我把:放在单引号中以逃避它们。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(165)
如何创建只有HTML和CSS的立方体
上一篇
CSS类可以继承一个或多个其他类吗
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(6条)