将 TimeSpan 转换为 "hh:mm" 高于 23:59

Converting TimeSpan to "hh:mm" higher than 23:59

我正在捕获时间跨度中的工作时间。

如果时间跨度大于 23:59,我转换为 hh:mm 格式只会执行 23:59,之后它会再次从 01:00 开始。

我希望能够显示 24:05 小时 我转换为十进制(24.08 小时)工作正常。

我哪里出错了有什么建议吗?自 2 天以来一直在比较字符串格式,我认为我从根本上做错了

十进制:

string decimalHours = TimeSpan.FromSeconds(value.Dauer).TotalHours.ToString("0.00");

hh:mm :

string hhmmHours = TimeSpan.FromSeconds(value.Dauer).ToString(@"hh:mm");

编辑:为了澄清改变了时代(从我这里展示东西的愚蠢方式)

您将无法通过 .ToString(format) 重载来格式化 TimeSpan 对象。

Microsoft doc,hh格式不能超过23:

hh The number of hours, which ranges from "00" to "23".

您必须使用 .TotalHours.

构建您想要的格式

怎么样:

var ts = new TimeSpan(hours: 50, minutes: 10, seconds: 20);
var hours = Math.Truncate(ts.TotalHours);
var formatted = $"{hours}:{ts.Minutes}:{ts.Seconds}";
Console.WriteLine(formatted); // Display 50:10:20

您甚至可以创建扩展方法。

@dbraillon 是对的。这只是一个简单的解决方案,可以实现您的愿望:

TimeSpan timeWorked = new(1, 0, 30, 0);

$"{Math.Floor(timeWorked.TotalHours)}:{timeWorked.Minutes}";

使用 Math.Floor 将总小时数四舍五入为最接近零的整数,并将 TimeSpan 的分钟部分作为分钟数(无需对分钟进行任何转换)。