c# - 无法从格式为 25-OCT-13 01.08.24.732000000 PM 的 Excel 文件解析 asp.net 中的日期时间

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

我正在读取的 Excel 文件的日期时间列值为 “25-OCT-13 01.08.24.732000000 PM” 并将其读入我尝试过的 .Net 日期时间格式

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#

最佳答案

看来您最多只能有 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 .

为了获得额外的精度,您可能需要查看不同的库。也许是乔恩·斯基特的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);

关于c# - 无法从格式为 25-OCT-13 01.08.24.732000000 PM 的 Excel 文件解析 asp.net 中的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919297/

相关文章:

java - 使用 Lucene 将整个数据库索引到单个文档中

mysql - 如何获取数据库中所有可用表的列表?

c# - 如何在控制台应用程序 C# 中打印值

c# - EF 通用存储库到任何数据提供者

c# - MVC3 在 ViewBag 文本中放置换行符

c# - 回发后 FileUpload 为空

c# - 根据字符串获取元素

c# - 使用 JSON 字符串填充 ASP.Net DropDownList

c# - 为什么我的代码在这个场景的方法完成之前就退出了?

.net - 为特定行禁用 StyleCop