【发布时间】: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 +
现在,真正的问题是
我们无法识别在 excel 文件中输入的实际格式,即它是 mm/dd/yyyy 还是 dd/mm/yyyy
虽然我们现在已经制定了 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 +
有没有什么方法可以解决这个问题,并尝试制作一个通用解析器来消除上述这些问题,这对我们和任何面临类似问题的人来说真的很有帮助。
【问题讨论】: