为什么TimeSpan.FromMinutes返回错误的总小时值

时间:2016-10-16 19:25:58

标签: c# timespan

当我在.netfiddle上运行时,我预计会有182小时30分钟的结果。但相反,我得到183小时 - 这是为什么?好像夏令时发生了?

TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(tsTime.TotalHours.ToString("00") + ":" + tsTime.Minutes.ToString("00"));

3 个答案:

答案 0 :(得分:0)

因为30分钟是0.5小时所以当你使用ToString()进行转换时,它会将其作为整小时。所以四舍五入可以解决问题

如果您想要舍入输出,请将其舍入为182:30

TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00"));

如果你想要实际,那么它会给182.5:30

Console.WriteLine(tsTime.TotalHours+ ":" + tsTime.Minutes);

答案 1 :(得分:0)

这是因为四舍五入。

您正在通过ToString输出一个double值,其格式根据标准规则将它们舍入为整数值,以便.5向上舍入到下一个整数值。

如果你检查实际值,你会发现它是你预期的182.5。

 Console.WriteLine(tsTime.TotalHours.ToString() + ":" + tsTime.Minutes.ToString());

输出

  

182.5:30

您需要截断该值以获取整个小时的总数(并且您可以丢失.ToString,因为值是整数

 Console.WriteLine(Math.Truncate(tsTime.TotalHours) + ":" + tsTime.Minutes);

甚至:

 Console.WriteLine((int)tsTime.TotalHours + ":" + tsTime.Minutes);

答案 2 :(得分:0)

        TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
        Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00"));

输出:

  

182:30