【问题标题】:importing from excel's string based DATE results in "String was not recognized as a valid DateTime."从 excel 的基于字符串的日期导入会导致“字符串未被识别为有效的日期时间”。
【发布时间】:2014-03-07 02:46:22
【问题描述】:

专家需要帮助来解决这个疯狂的问题 :) 并且同样的查询已经在互联网上流传了很长时间。

我们有 excel 文件,在这个 excel 文件中输入日期的用户有时没有遵循良好的做法。例如。

场景 1:(dd/mm/yyyy)

+---- Date ----+
+09/12/2014    +
+09/12/2014    +

场景 2:(dd/mm/yyyy) [但日期或月份区域中会缺少额外的数字]

+---- Date ----+
+9/12/2014     +
+9/12/2014     +

场景 2A:(dd/mm/yyyy)

+---- Date ----+
+9/1/2014      +
+9/1/2014      +

场景 3:(mm/dd/yyyy) [与场景 2 和 2A 完全相同]

+---- Date ----+
+12/9/2014     +
+12/9/2014     +

场景 3A:(mm/dd/yyyy)

+---- Date ----+
+1/9/2014      +
+1/9/2014      +

场景 4:(dd/mm/yyyy 或 mm/dd/yyyy)

+---- Date ----+
+9/1/2014      +
+9/1/2014      +

现在,真正的问题是

  1. 我们无法识别在 excel 文件中输入的实际格式,即它是 mm/dd/yyyy 还是 dd/mm/yyyy

  2. 虽然我们现在已经制定了 excel 文件格式的准则,但我们仍然担心“人为错误”,我们希望在我们的代码中尽可能地注意这一点。

  3. 到目前为止,我们还没有遇到关于日期年份部分的任何问题。一年中我们总是得到 4 位数,但我们仍然希望尽可能地解决这个问题。

经过大量研究,我们目前使用的是以下代码

Convert.ToDateTime(DateTime.ParseExact(item["Excel_Date_Column_Name"].ToString(), "dd/mm/yyyy", System.Globalization.CultureInfo.InvariantCulture).ToString("mm/dd/yyyy"))

但如前所述,如果输入的日期格式与读取的格式不匹配,例如会报错,

This format works
-----------------
Convert.ToDateTime(DateTime.ParseExact("13/12/2014", "dd/mm/yyyy", System.Globalization.CultureInfo.InvariantCulture).ToString("mm/dd/yyyy"))

This format will not work
-------------------------
Convert.ToDateTime(DateTime.ParseExact("13/12/2014", "mm/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture).ToString("mm/dd/yyyy"))

我们也遇到过在excel文件中使用'这个字符。

+---- Date ----+
+'9/1/2014     +
+'9/1/2014     +

有没有什么方法可以解决这个问题,并尝试制作一个通用解析器来消除上述这些问题,这对我们和任何面临类似问题的人来说真的很有帮助。

【问题讨论】:

    标签: c# excel datetime


    【解决方案1】:

    这可能是由于 Excel 中的日期列的日期格式与您的程序运行的区域不匹配。

    我不确定您是否可以检测给定单元格的语言环境,因为我不知道您在电子表格中使用什么库来阅读。

    最好的方法是使用yyyy-MM-dd 日期格式,因为日期字符串中的日/月不会有歧义。

    【讨论】:

    • 我确实理解这是一个挑战,但目前我们正在向参与生成这些 XLS 文件的人员制定规则。完全希望这不应该是一个问题。但无论如何,我们希望通过提供一些 AI(人工智能)功能来解决这个问题,该功能将对我们从 XLS 收到的输入日期进行验证。是的,我们可以考虑使用 yyyy-MM-dd,但由于他们的公司政策,我们不确定供应商是否会同意此更改。
    猜你喜欢
    • 2013-02-07
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多