根据长度 [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);
}
我正在开发一个 .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);
}