2016-12-07 475 views
1

我有一个始终以毫秒为单位的Timespan,但我只需要以分钟和秒显示日期,以便始终显示"mm:ss"。即使在时间范围内有几个小时,输出字符串也应该只包含分钟和秒。以毫秒为单位的TImespan,以分钟和秒为单位

例如,如果存在02:40:30的时间跨度。它应该转换为160:30

有没有办法做到这一点?

+1

是输入的时间跨度型或字符串? –

+0

请考虑手动完成此操作。给定一定的毫秒数,你能用基本的数学方法把它转换成分钟和秒钟吗? –

+0

这是你在找什么:http://stackoverflow.com/a/11024365/4660897? –

回答

6

里德的答案几乎是正确的,但不完全正确。例如,如果时间跨度是00:01:59,由于四舍五入为F0数字格式,里德解决方案输出“2:59”。这里的正确实施:

string output = string.Format("{0}:{1:00}", 
     (int)timespan.TotalMinutes, // <== Note the casting to int. 
     timespan.Seconds); 

在C#6,您可以使用字符串插值来减少代码:

var output = $"{(int)timespan.TotalMinutes}:{timespan.Seconds:00}"; 
+0

谢谢。我注意到我的测试中还有额外的一分钟。 – Gabbar

+0

@Diego请注意,如果时间跨度为非零毫秒,它们将被丢弃。因此,如果您的时间跨度为1小时59秒和999毫秒,它将以“1:59”输出,而不是“2:00”。 – Roman

2

您可以使用standard numeric format strings格式化这个自己:

string output = string.Format("{0}:{1}", (int)timespan.TotalMinutes, timespan.Seconds); 
+0

迭戈是正确的,因为TotalMinutes将其舍入到最接近的分钟,而最后一分钟是最后一分钟。 – Gabbar

1

这是一个非常基本的数学题。

除以1000得到总秒数。

除以60得分钟数。 总秒数 - (分钟* 60)=剩余秒数。

+0

我知道。我这样做了,但我想看看是否有更直接的方法。 – Gabbar