c# - 从 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() 仅(我不使用提供者)时,它可以在我的本地计算机上运行,但是当我发布到服务器时它不起作用(收到相同的错误消息)
解决方案
CultureInfo.InvariantCulture 似乎不喜欢接收该特定格式的字符串。我认为这与美国日期以 MM/dd/yyyy 顺序编写而在欧洲以 dd/MM/yyyy (包括英国和澳大利亚)编写的事实有关。
如果是这种情况,20/03/2010 13:58
将被解析为 2010 年第 20 个月的第 3 天,这没有任何意义。
我相信在这里使用 `new CultureInfo("en-gb") 而不是 CultureInfo.InvariantCulture 会是更好的选择。
推荐阅读
- java - 使用标准 api 对不相关的实体进行左连接
- c# - 如何为 csi.exe 设置 C# 版本
- c++ - c++中的宏扩展
- java - 带有装饰器的 RCP 图标在 macOS 上具有黑色背景
- visual-studio-code - 在 vscode 中具有相同包名时无法正确导入包
- django - Django admin:如何在 Django 管理表单页面中动态显示输入值的计算值?
- node.js - 获取节点中的角度形式数据值为空
- python - Python:如何在 2020 年提供单个可执行文件而不显示代码
- ios - 从 UIPasteBoard 获取复制文档的文件名
- python - 使用python如何单击按钮来抓取隐藏的内容