将 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 的分钟部分作为分钟数(无需对分钟进行任何转换)。
我正在捕获时间跨度中的工作时间。
如果时间跨度大于 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 的分钟部分作为分钟数(无需对分钟进行任何转换)。