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

本文关键字:小时 错误 TimeSpan FromMinutes 返回 为什么 | 更新日期: 2023-09-27 18:13:21

当我在.netfiddle上运行此程序时,我预计结果为182小时30分钟。但我却有183个小时——为什么会这样?就好像夏令时已经发生了?

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

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

因为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);
        TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
        Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00"));

输出:

182:30

这是因为四舍五入。

您通过ToString输出一个双值,其格式可根据标准规则将其四舍五入为整数值,因此.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);