计算分钟和小时

5

我有一个分钟值,想要得到两个字符串值,一个是小时数,另一个是分钟数,例如:

值 - 121分钟

字符串 hours = 2
字符串 minutes = 1

值 - 58分钟

字符串 hours = 0
字符串 minutes = 58

如何在C#中解决这个问题?

5个回答

34
var span = System.TimeSpan.FromMinutes(121);
var hours = ((int)span.TotalHours).ToString();     
var minutes = span.Minutes.ToString();
ToString()方法是因为你请求获取字符串值...
TotalHours表示TimeSpan的完整小时数,它们可以超过24小时(而“Hours”字段的最大值为24)。
哦,顺便说一句:为什么不自己计算,而要使用TimeSpan呢?因为TimeSpan已经由Microsoft进行了调试和测试,它具有漂亮干净的接口(查看代码时很容易看到正在发生的事情,无需在头脑中进行计算),并且很容易扩展到其他解决方案。(输入以秒为单位?使用TimeSpan.FromSeconds()。想要得到天数?使用span.TotalDays...)
更新:我刚刚注意到我的回答中有错误:TotalHours返回所有小时的小数值,因此在将其转换为字符串之前我们必须将其截断为整数。

这不会用零填充分钟。添加 ToString("00") 应该可以解决它。 - Coincoin
@Coincoin:看一下楼主的121分钟示例,不需要填充。 - Renze de Waal

8
使用Timespan结构体及其Parse方法。

他说他有一分钟,并想将其转换为字符串,而不是相反的方式。 - froh42
时间跨度仍然是最佳选择。 - Joel Coehoorn

2
int value = 121;
int hours = value / 60; // 2
int minutes = value % 60; // 1

string strHours = hours.ToString();
string strMinutes = minutes.ToString();

使用TimeSpan是面向对象的方式,但这种方法简单而且有效。 - spoulson
我使用Reflector查看了TimeSpan:所有结果都是通过毫秒刻度的乘法计算的。我相信我的方法可以更快! - abatishchev

1
int value = 121;
int hours = value / 60;
int minutes = value % 60;

为什么要踩?这是从总分钟值获取小时/分钟的完全有效的方法,与abatishchev的答案相同,除了.ToString()的部分。 - CraigTP
@Craig:我搞砸了。我误将另一个答案的错误点踩成了负数。我已经把两个负数都删掉了。 - Coincoin

0
int value = 121;
TimeSpan timeSpan = TimeSpan.FromMinutes(value);

// gives you the rounded down value of 2
int hours = timeSpan.Hours; 

// gives you the minutes left of the hour
int minutes = value - (hours * 60);

为什么不在这里使用 TimeSpan.Minutes?这将返回1,而不是 TimeSpan.TotalMinutes 返回的121。 - Patrick McDonald
实际上,TotalMinutes返回一个double,如果你正在计算日期之间的差异,它可能会返回121.3523或其他数字。是的,如果你将其转换为Int32,它将被转换为121。我没有测试TimeSpam.Minutes。但是,如果它返回“1”而不是“121”,那就是这样了。 - eduncan911

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