我在代码中有这一行:
TalkTime = TimeSpan.FromMinutes((int)g.Sum(b => b.Field<int?>("talkTime"))).ToString("hh':'mm':'ss")
我需要将时间显示为总小时数。使用totalHours给我举例54.33。我需要它是54:33:00 ..
有什么建议吗?
答案 0 :(得分:3)
54:33:00!= 54小时,20分钟零秒
我认为你的逻辑可能会偏离你打算输出的内容,因为TimeSpan.TotalHours
将输出一个双倍而不是实际正确的分钟数。
// Get your timespan (using the same number of minutes as expected)
var timespan = TimeSpan.FromMinutes(3260);
// This would output a double and not a string
timespan.TotalMinutes; // yields 55.3333 (i.e. 54 hours and 1/3 or 20 minutes)
所以我不相信你实际上想要输出54:33:00
,因为它不正确,因为它意味着54小时33分钟,而不是54小时20分钟的正确值,你可以通过String.Format()
方法完成:
// This would output 54:20:00, which should be your correct answer
String.Format("{0:00}:{1:00}:{2:00}",(int)timespan.TotalHours, timespan.Minutes,0)
所以原始代码的示例可能如下所示:
var talktime = TimeSpan.FromMinutes((int)g.Sum(b => b.Field<int?>("talkTime")));
// Use your talktime to set your proper string variable
TalkTime = String.Format("{0:00}:{1:00}:{2:00}",(int)talktime.TotalHours, talktime.Minutes,0);
答案 1 :(得分:0)
TimeSpan.TotalHours
以小时为单位返回TimeSpan
个实例中的当前时间。所以0.33是0.33小时,而不是33分钟。使用数学和自定义格式,您可以实现您想要做的事情。这是一个例子:
var time = new TimeSpan(54, 21, 0);
var hours = System.Math.Floor(time.TotalHours);
var minutes = System.Math.Ceiling((time.TotalHours - hours) * 60); // you can also use time.Minutes
Console.WriteLine(string.Format("{0:00}:{1:00}:{2:00}", hours, minutes, 0));
这需要Floor
属性的TotalHours
来确定小时组件,并通过将TotalHours
属性的分数乘以60来计算分钟组件。您还可以使用{{ 1}}用于分钟组件。
答案 2 :(得分:0)
TotalHours的值54.33并不意味着54小时33分钟,这意味着54小时+ 33/100小时,54小时和33 * 60/100分钟,即54小时和19.8分钟,或54小时19分+ 0.8 * 60秒= 48秒。所以54.33小时是54:19:48。
假设您想在字符串54:19:48中显示小数54.33的值,我想最好的方法是创建一个实现IFormatProvice和ICustomFormater的类。 ICustomFormatter.Format函数将以与上述相同的方式为您执行格式化:
MSDN about IFormatProvider以及在ICustomFormatter.Format
中做什么的示例