DateTime.ParseExact,秒数可变

时间:2019-09-27 13:25:07

标签: 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);

这只能精确到小数点后一位。其他十进制的十进制会导致异常。

问题:

  • 秒数的小数位数是否通用?

2 个答案:

答案 0 :(得分:2)

您可以使用DateTimeFormat数组。 喜欢

string[] validFormats = { "HH:mm:ss.f", "HH:mm:ss.ff", "HH:mm:ss.fff" };
DateTime.ParseExact("15:42:58.1", validFormats, CultureInfo.InvariantCulture, DateTimeStyles.None);

现在,即使您输入的是3位数字,这也会解析您的DateTime

.net Fiddle

答案 1 :(得分:1)

如果这是一天中的某个时间或类似时间,则可以使用TimeSpan。参见Custom TimeSpan format strings。杰罗恩·莫斯特(Jeroen Mostert)评论您的问题的技巧仍然适用:使用大写字母F

必须使用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"解析确定。