如何将秒转换为分:秒格式

29

如何将秒转换为分:秒格式

11个回答

45

一种多功能的版本是使用 TimeSpan,如下:

var span = new TimeSpan(0, 0, seconds); //Or TimeSpan.FromSeconds(seconds); (see Jakob C´s answer)
var yourStr = string.Format("{0}:{1:00}", 
                            (int)span.TotalMinutes, 
                            span.Seconds);

32
int totalSeconds = 222;
int seconds = totalSeconds % 60;
int minutes = totalSeconds / 60;
string time = minutes + ":" + seconds;

9
将125秒格式化为"2:5",但我猜测使用"2:05"可能更合适。 - Jon Skeet
2
是的,字符串格式化没有在单个数字的秒数前加上前导零,所以我会这样做:string time = (totalSeconds / 60).ToString() + ":" + (totalSeconds % 60).ToString("00"); - Russell Strauss

23

为完整性起见,我将添加一个使用 TimeSpan 的答案(在 .NET 4.0 中有效):

int seconds = 1045;
var timespan = TimeSpan.FromSeconds(seconds);            
Console.WriteLine(timespan.ToString(@"mm\:ss"));

建议使用.FromSeconds而不是像我一样使用构造函数。但是你的代码无法编译——没有.ToString的重载。 - Lasse Espeholt
据我所知,这个重载是在.NET 4中添加的:http://msdn.microsoft.com/en-us/library/dd992632.aspx - Jakob Christensen
1
啊,好吧 :) 但另一个问题是它只会显示到59分钟。然而,我不知道那是否足够给Ramesh使用。 - Lasse Espeholt
2
好的观点。看到Ramesh实际选择了哪个答案,我真的不认为他在意格式那么多 :-) - Jakob Christensen

6

类似这样:

string minSec = string.Format("{0}:{1:00}", seconds / 60, seconds % 60);

请注意,这样做将确保秒数始终显示为两位数字,例如125秒的时间将会显示为“2:05”。目前分钟并没有被以同样的方式处理,但当然也可以这样做。
这种方法在处理负数时效果不佳。如果您的秒数可能是负数,您可能需要像这样的解决方案:
string minSec = string.Format("{0}:{1:00}", seconds / 60, 
                              (Math.Abs(seconds)) % 60);

最后,您的秒数是否总是少于一小时?例如,当您实际上想表达“1:20:00”时,看到“80:00”可能会显得奇怪。


5
double seconds=125;    
TimeSpan.FromSeconds(seconds).ToString() 

将会给你:00:02:05。根据我的理解,这个内置的解决方案更具可扩展性,因为它可以给出小时数,而不需要任何逻辑上的改变。


十年后:这会将毫秒添加到结果字符串中,这不是 OP 所要求的。 - Daap
1
十年之后:您可以使用 TimeSpan.FromSeconds(seconds).ToString(@"hh\:mm\:ss") 以小时、分钟、秒的格式获取时间。如果您还想要毫秒,可以使用 .ToString(@"hh\:mm\:ss\:fff"); - Gopi

4
var seconds = 60;
//10,000 ticks in a millisecond
var ticks = seconds*10000*1000;
DateTime dt = new DateTime(ticks);
dt.ToString("mm:ss");

当时间超过一小时时,它是否仍然有效?例如,3700秒是1小时1分钟40秒。它不应该返回1:40而是61:40吗? - Stefan Steinegger
是的,它可以与小时、天和DateTime结构的每个成员一起使用。自己试试吧 ;) - Michel Triana
在代码中添加一些解释会使这个答案更好。 - Thom

3

虽然不完全回答原问题,但是如果未来有任何人(包括我自己)从谷歌过来想要将浮点数格式化为毫秒:

float secs = 23.69;
string m_ss_mmm = string.Format("{0}:{1:00}.{2:000}", (int)secs / 60, (int)(secs % 60), (secs - ((int)secs)) * 1000);

结果:

0:23.690

3

简单的数学,60秒等于一分钟。

int mins = totalseconds/60;
int secs = totalseconds % 60;

Console.Writeline(string.Format("{0}:{1}", mins, secs));

2

使用PadLeft的另一种显示秒数的方式可以是“2:05”等。

string time = minutes.ToString() + ":" + seconds.ToString().PadLeft(2,'0');

0
如果您需要使用浮点数或双精度数:
float seconds = 339;
float totalTimeInMins = (float) (Math.Floor(seconds / 60) + (seconds % 60) / 100);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接