我正在阅读的excel文件的日期时间列值为"25-OCT-13 01.08.24.732000000 PM"
并将其读入.Net的DateTime格式我试过
DateTime.TryParseExact(certDate, "dd-MMM-yy hh.mm.ss.fffffffff tt", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out certifiedDateTime)
但总是假的。我错过了什么。
我在Visual Studio 2013中使用C#,.Net 4.5
答案 0 :(得分:2)
看来您最多只能有7个f
元素。
这有效:
string certDate = "25-Oct-13 01.08.24.7320000 PM";
DateTime certifiedDateTime;
DateTime.TryParseExact(certDate, "dd-MMM-yy hh.mm.ss.fffffff tt",
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out certifiedDateTime);
certifiedDateTime.Dump();
这似乎是因为DateTime存储为代表刻度的64位数字。 Eric Lippert的一篇很好的相关文章称为Precision and accuracy of DateTime。
要获得额外的精度,您可能需要查看其他库。也许Jon Skeet的Noda Time,虽然这可能也无济于事。
但是,我猜你实际上并不希望亚秒级精度达到9位小数(特别是因为你不太可能在原始数据中使用它,除非尾随零是一个很大的巧合)。
因此,如果你很高兴牺牲这种多余的精度,你可以使用Regex或类似的解析毫秒并将它们减少到7位。
因此,如果您愿意牺牲多余的精确度,MarcinJuraszek's评论使用包含0
的格式听起来就像是最好的方法:
DateTime.TryParseExact(certDate, "dd-MMM-yy hh.mm.ss.fffffff00 tt",
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out certifiedDateTime);