首页 > 解决方案 > 从 Excel 中读取 Day > 12 的日期时,DateTime 转换不起作用

问题描述

这是我的 XLSX 文件中的前 5 行:

在此处输入图像描述

请注意,该ResLastCallDate列的格式是CustomFormat->dd/mm/yyyy hh:mm:ss. 然而,出于某种原因,第 4 行看起来与其他行不同。这并不重要,重要的部分是 XLSX 文件正在上传到我通过 EPPlus 读取数据的 asp.net 4.5 网页。但是,当我阅读 ResLastCallDate 列时,我收到一个错误。请看下面的代码:

System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
if (!DateTime.TryParse(dr["ResLastCallDate"].ToString(),provider, System.Globalization.DateTimeStyles.AssumeLocal, out resLastCallDate))
{
     Msg = Msg + string.Format("Row {0}: ResLastCallDate is not date ({1}).\n", r, dr["ResLastCallDate"].ToString());
}
...
txtDebug.Text = Msg;

我尝试不使用提供程序,其他 DateTimeStyles,它们都没有工作,除了 excel 中的第 4 行总是被正确读取。查看输出:

Row 0: ResLastCallDate is not date (20/03/2018 13:58)
Row 1: ResLastCallDate is not date (20/03/2018 13:58)
Row 3: ResLastCallDate is not date (15/03/2018 20:25)

所以第 2 行(等于 ClientID=3621)可以工作,但其他行没有原因。我已经在这些单元格的 excel 中尝试了常规和日期格式,但仍然无法正常工作。我还能做些什么来处理这个问题?任何帮助,将不胜感激。

编辑:当我将它转换为 dr["ResLastCallDate"].ToString() 仅(我不使用提供者)时,它可以在我的本地计算机上运行,​​但是当我发布到服务器时它不起作用(收到相同的错误消息)

标签: c#asp.netexcelepplusasp.net-4.5

解决方案


CultureInfo.InvariantCulture 似乎不喜欢接收该特定格式的字符串。我认为这与美国日期以 MM/dd/yyyy 顺序编写而在欧洲以 dd/MM/yyyy (包括英国和澳大利亚)编写的事实有关。

如果是这种情况,20/03/2010 13:58将被解析为 2010 年第 20 个月的第 3 天,这没有任何意义。

我相信在这里使用 `new CultureInfo("en-gb") 而不是 CultureInfo.InvariantCulture 会是更好的选择。


推荐阅读