尝试将日期时间字符串转换为日期时间格式

4

我想将日期时间字符串"31.01.2017 07:56:29.470000000"解析为datetime格式。

所使用的代码:

   DateTime requiredDate;
    string date = "31.01.2017 07:56:29.470000000";

    DateTime.TryParseExact(date,
                           "dd.MM.yyyy hh:mm:ss.fffffff",
                           CultureInfo.InvariantCulture,
                           DateTimeStyles.None,
                           out requiredDate);

注意:日期字符串是精确的“31.01.2017 07:56:29.470000000”,但如果我使用“31.01.2017 07:56:29.4700000”,那么它就可以正常工作。

请解析“31.01.2017 07:56:29.470000000”。


DateTime.TryParseExact返回false还是抛出异常?如果是后者,那么异常是什么? - Polyfun
没有异常,但解析不成功。 - Gaurav123
1
@CodeCaster:这不是唯一的问题。即使匹配成功,它也会返回false。我相信有一个允许的最大数量的f。很可能,OP需要预处理字符串。 - Daniel Hilgarth
1
9位数字?这种精度是否存在? - Drag and Drop
1
@shash678,在一纳秒内,光可以移动30厘米。我的意思是我不确定是否有仪器能够区分1纳秒和2纳秒之间的差别。 - Drag and Drop
显示剩余2条评论
2个回答

5

问题在于你的解析字符串中允许的 f 的最大数量:最大值为 fffffff(7 个小数位)。而你的字符串中包含了 9 个小数位。

你可以在文档中找到这个限制。它提到了介于 ffffffff 之间的所有可能值,但没有更详细的说明。


是的,使用7位数是可以正常工作的,但根据从第三方收到的文件,我们需要将其改为9位数。这可行吗? - Gaurav123
2
不,你必须自己去掉结尾。 - Patrick Hofman
是的,我同意,因为我也只找到了7个f...所以我应该通知客户,在7之前还有可能吗? - Gaurav123
1
Gaurav:精度必须有一些硬编码/硬件限制,看起来你已经达到了它。 - Polyfun

2
问题出在数字f的数量上,最多只能有7个。您正在使用符合ISO 8601标准的往返日期/时间模式。请参阅文档

"O"或"o"标准格式说明符对应DateTime值的"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK"自定义格式字符串和DateTimeOffset值的"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz"自定义格式字符串。

您可以看到,文档指示的格式中只有7位f
要解决问题,您应该从输入中删除最后2个数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接