我有以下代码行:
DateTime dt1 = DateTime.ParseExact("2017/04/09 2:44 PM", "yyyy/MM/dd h:mm tt", System.Globalization.CultureInfo.InvariantCulture);
正如您所看到的,日期时间和格式匹配(至少看起来匹配),但转换时仍然出错:
字符串未被识别为有效的DateTime。
答案 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);