“TimeSpan”.Net 数据类型不接受超过 24 小时。抛出验证错误

问题描述 投票:0回答:2

有人在 C# 中使用过“TimeSpan”数据类型吗?我无法将超过 24 小时的值发布到 C# MVC 控制器。我的 DTO 有一个具有“TimeSpan”数据类型的属性。我需要为最终客户提供使用 Timespan 的灵活性。我现在收到响应错误:

“将值“59:42:33”转换为类型“System.Nullable`1[System.TimeSpan]”时出错。

我在发布自身时收到以下验证错误,甚至没有点击 C# 端点..

Response

请求 json 如下所示:

{
"timeSinceStarted" : "59:42:33"
}
c# .net model-view-controller timespan
2个回答
1
投票

这对我来说确实很奇怪,但我想我已经有了答案。

https://learn.microsoft.com/en-us/dotnet/api/system.timespan.parse?view=net-5.0#System_TimeSpan_Parse_System_String_

例如,小时部分 hh 的值必须介于 0 到 23 之间。因此,将“23:00:00”传递给 Parse 方法将返回 23 小时的时间间隔。另一方面,传递“24:00:00”会返回 24 天的时间间隔。由于“24”超出了小时部分的范围,因此它被解释为天部分。

因为这个很奇怪的逻辑,显然,当你指定24小时(变成24天)时,分钟字段被解释为小时,不能超过23。果然,在我的测试中,“24:23:00”是有效(实际上解析为 24 天 23 小时),而“24:24:00”无效。

这是我书中的一个错误,但由于它实际上被记录为正确的,因此无法修复。


-2
投票

嗯,最简单的事情就是自己格式化它,例如下面的代码

不是 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
© www.soinside.com 2019 - 2024. All rights reserved.