DateTime.TryParseExact单秒

DateTime.TryParseExact single second

我有许多不同格式的比赛时间结果(或多或少是小时、分钟、秒和毫秒的任意组合):

我用有效格式列表解析它们,到目前为止,所有格式都有效,除了一个:单一的第二格式,例如"5".

出于某种原因,以下列表(包含 "s" 作为第一项)无法帮助我将字符串“5”解析为日期时间,但“25”可以正常工作。

var timeString = "5";
var timeFormats = new[] { "s", "s.f", "s.ff", "ss", "ss.f", "ss.ff", "m:ss", "m:ss.f", "m:ss.ff", "mm:ss", "mm:ss.f", "mm:ss.ff", "H:mm:ss", "H:mm:ss.f", "H:mm:ss.ff", "HH:mm:ss", "HH:mm:ss.f", "HH:mm:ss.ff" };
DateTime timeValue;
DateTime.TryParseExact(timeString, timeFormats, null, DateTimeStyles.None, out timeValue);

知道为什么这不能像我预期的那样工作吗?或者有没有更简洁的方法来覆盖所有这些时间格式而不添加另一个 nuget 包......? 干杯!

因为格式中只有一个字符,所以它被视为 the Sortable standard format,而不是带有秒的自定义格式。

要更改此设置,请在自定义格式前加上 % 字符,如 "%s"。参见 "Using single custom format specifiers"

此外,如果这些是比赛的实际经过时间,则 TimeSpan 是比 DateTime 更合适的数据结构。切换时要小心,因为并非所有格式标记在两个对象之间都是相同的。特别是,TimeSpan 使用 h 几个小时,而不是 H。参见 Custom TimeSpan Format Strings