解析确切的自定义时间格式?
我似乎无法获得适合我的TimeSpan.ParseExact()
的自定义格式:
时间样本预期:
1:23:45.6 23:45.6 23:45 1:23:45
我正在使用的字符串格式:
string withTenthFormat = @"[%h\:]mm\:ss[\.%f]";
试着有时间和几分之一秒。 但是,使用此格式和CultureInfo.InvariantCulture
会导致FormatException
。 我错过了什么?
我不知道能够在自定义格式字符串中指定类似的可选部分。 我建议你使用多个格式字符串,并使用TimeSpan.ParseExact
的重载,它采用一系列格式。
string[] formats = { @"h\:mm\:ss\.FFF", @"mm\:ss\.FFF", @"h\:mm\:ss", @"mm\:ss"}; string[] values = { "1:23:45.6", "23:45.6", "23:45", "1:23:45" }; foreach (string value in values) { var parsed = TimeSpan.ParseExact(value, formats, CultureInfo.InvariantCulture); Console.WriteLine(parsed); }
(我使用FFF
作为毫秒说明符,允许你表达“1:23:45.67”。如果你只需要几百毫秒, F
或f
就可以了。)
我只是简单地使用DateTime.ParseExact
因为它更强大:
string[] strings = new[] { "1:23:45.6", "23:45.6", "23:45", "1:23:45" }; string[] formats = new[] { "H:mm:ss.f", "H:mm.f", "H:mm", "H:mm:ss" }; TimeSpan[] timespans = strings .Select(str => { TimeSpan? ts = null; DateTime dt; if (DateTime.TryParseExact(str, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) ts = dt.TimeOfDay; return ts; }) .Where(ts => ts.HasValue) .Select(ts => ts.Value) .ToArray();
示范