有人在 C# 中使用过“TimeSpan”数据类型吗?我无法将超过 24 小时的值发布到 C# MVC 控制器。我的 DTO 有一个具有“TimeSpan”数据类型的属性。我需要为最终客户提供使用 Timespan 的灵活性。我现在收到响应错误:
“将值“59:42:33”转换为类型“System.Nullable`1[System.TimeSpan]”时出错。
我在发布自身时收到以下验证错误,甚至没有点击 C# 端点..
请求 json 如下所示:
{
"timeSinceStarted" : "59:42:33"
}
这对我来说确实很奇怪,但我想我已经有了答案。
例如,小时部分 hh 的值必须介于 0 到 23 之间。因此,将“23:00:00”传递给 Parse 方法将返回 23 小时的时间间隔。另一方面,传递“24:00:00”会返回 24 天的时间间隔。由于“24”超出了小时部分的范围,因此它被解释为天部分。
因为这个很奇怪的逻辑,显然,当你指定24小时(变成24天)时,分钟字段被解释为小时,不能超过23。果然,在我的测试中,“24:23:00”是有效(实际上解析为 24 天 23 小时),而“24:24:00”无效。
这是我书中的一个错误,但由于它实际上被记录为正确的,因此无法修复。
嗯,最简单的事情就是自己格式化它,例如下面的代码
不是 59 小时,而是尝试 2 天 11 小时 (2.11:42:33)?输入可能会以默认格式进入 TimeSpan.TryParse()
第二种方式
return string.Format("{0}hr {1}mn {2}sec",
(int) span.TotalHours,
span.Minutes,
span.Seconds);
第三种方法是
string span = "35:15";
TimeSpan ts = new TimeSpan(int.Parse(span.Split(':')[0]), // hours
int.Parse(span.Split(':')[1]), // minutes
0); // seconds