将 TimeSpan 转换为高于 23:59 的“hh:mm”

问题描述

我正在捕捉时间跨度内的工作时间。

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

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

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

十进制:

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

时:分:

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

编辑:为了澄清改变了时间(愚蠢的方式来展示我的东西)

解决方法

您将无法通过 TimeSpan 重载以您喜欢的方式格式化 .ToString(format) 对象。

Microsoft dochh格式不能超过23

hh 小时数,范围从“00”到“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,30,0);

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

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