C# DateTime.ParseExact,具有可变的秒分数

C# DateTime.ParseExact,具有可变的秒分数,c#,datetime,parsing,C#,Datetime,Parsing,我必须解析以小时、分钟、秒和秒的分数表示的时间。比如 "15:42:58.1" "15:42:58.21" "15:42:58.417" 使用以下代码: DateTime.ParseExact("15:42:58.1", "HH:mm:ss.0.f", CultureInfo.InvariantCulture); 这只适用于一个小数点。任何其他十进制名称都将导致异常 问题: 秒的小数是否有一种通用的可能性? 您可以使用DateTimeFormat数组。 像 现在,这将解析您的日期时间,即使您

我必须解析以小时、分钟、秒和秒的分数表示的时间。比如

"15:42:58.1"
"15:42:58.21"
"15:42:58.417"
使用以下代码:

DateTime.ParseExact("15:42:58.1", "HH:mm:ss.0.f", CultureInfo.InvariantCulture);
这只适用于一个小数点。任何其他十进制名称都将导致异常

问题:

秒的小数是否有一种通用的可能性?
您可以使用DateTimeFormat数组。 像

现在,这将解析您的日期时间,即使您使用3位数的小数

如果这是一天中的某个时间或类似时间,则可以使用TimeSpan。看见Jeroen Mostert对你的问题的评论中的技巧仍然适用:使用大写字母Fs

必须使用TimeSpan格式字符串转义分隔符。因此,请使用以下方法之一:

var ts1 = TimeSpan.ParseExact("15:42:58.1", @"hh\:mm\:ss\.FFFFFFF", CultureInfo.InvariantCulture);
var ts2 = TimeSpan.ParseExact("15:42:58.1", "hh':'mm':'ss'.'FFFFFFF", CultureInfo.InvariantCulture);

即使是尾随的零,这似乎也能起作用,例如15:42:58.10解析正常。

没有月份和年份等。将其建模为时间跨度是否更好?具有接受格式数组的重载。HH:mm:ss.fffffffff将适用于任何数量的小数位数,最多为7。小提琴写入时间为2019年9月27日下午3:42:58。如果我在9月27日以外的另一天尝试小提琴,我想小提琴会返回不同的弦。询问者是否希望当前日期泄漏到他解析的值中?@JeppeStigNielsen,我更新了我的小提琴,现在它将只显示时间字符串。ToLongTimeString
var ts1 = TimeSpan.ParseExact("15:42:58.1", @"hh\:mm\:ss\.FFFFFFF", CultureInfo.InvariantCulture);
var ts2 = TimeSpan.ParseExact("15:42:58.1", "hh':'mm':'ss'.'FFFFFFF", CultureInfo.InvariantCulture);