LINQ C# - 如何使用timepan显示超过24小时

时间:2016-06-06 13:41:44

标签: c# linq

我在代码中有这一行:

TalkTime = TimeSpan.FromMinutes((int)g.Sum(b => b.Field<int?>("talkTime"))).ToString("hh':'mm':'ss")

我需要将时间显示为总小时数。使用totalHours给我举例54.33。我需要它是54:33:00 ..

有什么建议吗?

3 个答案:

答案 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);

你可以see a working example of this in action here

答案 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函数将以与上述相同的方式为您执行格式化:

  • 花费总时数并使用Math.Floor向下舍入到数小时。
  • 使用CultureInfo.DateTimeFormatInfo调查是否添加分号或正斜杠或任何奇怪的字符
  • 使用余数* 60计算(十进制)分钟数
  • 再次:Math.Floor计算完整分钟数和余数以获得第二个
  • 执行相同操作以获取秒数和毫秒数。

MSDN about IFormatProvider以及在ICustomFormatter.Format

中做什么的示例