问题描述
我正在捕捉时间跨度内的工作时间。
如果时间跨度的跨度高于 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 doc,hh格式不能超过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 的分钟部分作为分钟数(无需对分钟进行任何转换)。