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