将字符串转换为超过7位小数毫秒的DateTime

本文关键字:小数 DateTime 7位 字符串 转换 | 更新日期: 2023-09-27 18:26:22

所以我试图将以下格式的字符串日期转换为DateTime。当使用格式字符串"ffffff"有7个小数点时,我可以使用ParseExact解析它,但我得到的字符串可以(并不总是)有9个小数点。

我真的不在乎最后几个数字是什么,因为无论如何我都会四舍五入。我正在寻找的是在从ParseExact方法中得到错误之前解析或截断它们的方法,因为它与"fffffff"不匹配。我唯一的想法是根据小数点后的字符数截断字符串。有更简单的方法吗?提前感谢!

要解析的示例字符串:"2015-12-10 13:14:15.123456789"

DateTime.ParseExact("2015-12-10 13:14:15.123456789", "yyyy-MM-dd HH:mm:ss.fffffff", System.Globalization.CultureInfo.InvariantCulture);

抛出FormatException,但以下操作有效。

DateTime.ParseExact("2015-12-10 13:14:15.1234567", "yyyy-MM-dd HH:mm:ss.fffffff", System.Globalization.CultureInfo.InvariantCulture);

将字符串转换为超过7位小数毫秒的DateTime

我不相信用普通的解析代码和现有的文本可以做到这一点。DateTime的精度只下降到刻度,其中刻度为100纳秒。我认为最简单的方法是截断字符串本身:

string pattern = "yyyy-MM-dd HH:mm:ss.fffffff";
if (text.Length > pattern.Length)
{
    text = text.Substring(0, pattern.Length);
}
DateTime value = DateTime.ParseExact(text, pattern, CultureInfo.InvariantCulture);

强制插入:在Noda Time 2.0中,您不需要这样做,因为它支持纳秒的精度:)

除了Jon的答案外,7是解析的极限,表示秒分数的有效位数。

来自"fffffff"自定义格式说明符

尽管可以显示千万分之一秒时间值的组成部分,该值可能没有意义。这个日期和时间值的精度取决于系统时钟。在Windows NT 3.5(及更高版本)和Windows Vista上在操作系统中,时钟的分辨率约为10-15毫秒。