为什么这不被认为是有效的日期时间?

时间:2017-06-10 16:02:52

标签: c# datetime

我有以下代码行:

DateTime dt1 = DateTime.ParseExact("‎2017/‎04/‎09 ‏‎2:44 PM", "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture);  

正如您所看到的,日期时间和格式匹配(至少看起来匹配),但转换时仍然出错:

  

字符串未被识别为有效的DateTime。

1 个答案:

答案 0 :(得分:5)

不确定你的位置,但输入中有一些隐形的unicode字符。尝试复制粘贴它,它将工作:

DateTime dt1 = DateTime.ParseExact("2017/04/09 2:44 PM", "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture);  

进一步挖掘,有一个" E2 80 8E"介于/和0之间,另一个介于2. According to the unicode table之前,这是"从左到右标记"。

使其发挥作用的一种方法是删除您不希望看到的所有字符:

var input = "‎2017/‎04/‎09 ‏‎2:44 PM";

var sanitizedInput = Regex.Replace(input, @"[^\w:/ ]", string.Empty);

DateTime dt1 = DateTime.ParseExact(sanitizedInput, "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture);