根据长度 [ASP.NET Core MVC] 格式化 TimeSpan 的最佳方式

Best way to format a TimeSpan depending on length [ASP.NET Core MVC]

我正在开发一个 .NET Core MVC 应用程序,它将用户的 运行 数据作为输入并将其存储在数据库中。用户将输入时间(运行 的总时间)、配速(每英里)和距离(以英里为单位),然后提交。 Time和Pace都是TimeSpan的。

这是我的问题出现的地方:

示例:如果我想在 45 分 15 秒内输入时间,用户必须输入 00:45:15,他们不会这样做。如果他们输入 45:15,它将在数据库中显示为 45 小时 15 分钟 - 这显然不是我们想要的。

我的问题是,最好的格式化方式是什么,以便当用户以这种格式输入 XX:XX 时,它将 运行 存储为 minutes:seconds,但是如果用户输入 XX:XX:XX(超过一个小时 运行s),它存储为小时:minutes:seconds?

提前致谢!

我会用一些字符串插值来解决这个问题。考虑以下因素:

<input type="number" name="minutes" min="0" max="59">
<input type="number" name="seconds" min="0" max="59>

然后是 C#

var minuteTime = Request.Form["minutes"]
var secondTime = Request.Form["seconds"]
FormattableString finalDate = "[=11=]:{minuteTime}:{secondTime}"
//Write to the database with model

一种尺寸适合所有人如何

        foreach (var s in new[] {"00:45:15", "45:15" })
        {
            var parsed = TimeSpan.TryParseExact(s, new[] { "mm\:ss", "hh\:mm\:ss" }, null, out var result);
            Assert.IsTrue(parsed);
            Assert.AreEqual(0, result.Hours);
            Assert.AreEqual(45, result.Minutes);
            Assert.AreEqual(15, result.Seconds);
        }