无法从格式的excel文件解析asp.net中的DateTime - 25-OCT-13 01.08.24.732000000 PM

时间:2013-11-12 01:32:41

标签: c# asp.net .net excel datetime-conversion

我正在阅读的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

1 个答案:

答案 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);