2

我正在阅读的 excel 文件具有 datetime 列值,"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、.Net 4.5 中使用 C#

4

1 回答 1

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 的评论使用一种格式,包括0听起来是最好的方法:

DateTime.TryParseExact(certDate, "dd-MMM-yy hh.mm.ss.fffffff00 tt", 
   CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, 
   out certifiedDateTime);
于 2013-11-12T01:39:16.123 回答