Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从excel导入';s基于字符串的日期结果为;字符串未被识别为有效的日期时间。”;_C#_Excel_Datetime - Fatal编程技术网

C# 从excel导入';s基于字符串的日期结果为;字符串未被识别为有效的日期时间。”;

C# 从excel导入';s基于字符串的日期结果为;字符串未被识别为有效的日期时间。”;,c#,excel,datetime,C#,Excel,Datetime,专家们需要帮助来解决这个疯狂的问题:)同样的问题也在互联网上流传了很长时间 我们有excel文件,在excel文件中输入日期的用户有时不遵循良好做法。比如说 情景1:(日/月/年) 场景2:(dd/mm/yyyy)[但日期或月份区域中缺少额外的数字] +---- Date ----+ +9/12/2014 + +9/12/2014 + 情景2A:(日/月/年) 情景3:(mm/dd/yyyy)[与情景2和2A完全相同] +---- Date ----+ +12/9/2014

专家们需要帮助来解决这个疯狂的问题:)同样的问题也在互联网上流传了很长时间

我们有excel文件,在excel文件中输入日期的用户有时不遵循良好做法。比如说

情景1:(日/月/年)

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

+---- Date ----+
+9/12/2014     +
+9/12/2014     +
情景2A:(日/月/年)

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

+---- Date ----+
+12/9/2014     +
+12/9/2014     +
场景3A:(年月日)

场景4:(年月日或年月日)

现在,真正的问题是

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

  • +---- Date ----+
    +09/12/2014    +
    +09/12/2014    +
    
  • 虽然我们现在已经为excel文件格式设置了指导原则,但我们仍然担心“人为错误”,我们希望在代码中尽可能多地注意这一点

  • 到目前为止,我们还没有任何关于日期的年份部分的问题。我们一年中一直在得到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     +
    

    是否有任何方法可以解决此问题,并尝试创建一个通用解析器来消除上述问题,这对我们和任何面临类似问题的人都会非常有帮助。

    这可能是因为Excel中的日期列的日期格式与程序运行的区域设置不匹配作为

    我不确定您是否能检测到给定单元格的区域设置,因为我不知道您在电子表格中读取的库是什么


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

    我确实理解这是一个挑战,但目前我们正在将规则提交给参与生成这些XLS文件的人员。我完全希望这不应该成为一个问题。但在任何情况下,我们都希望通过提供一些AI(人工智能)功能,在我们从XLS收到输入数据时进行验证,最终解决这个问题。是的,我们可以考虑使用YYYY MM DD,但我们也不确定厂商会同意这种变化,因为他们的公司政策。
    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"))
    
    +---- Date ----+
    +'9/1/2014     +
    +'9/1/2014     +