应该进行以下解析,
DateTime.ParseExact("20150105 91353", "yyyyMMdd Hmmss", CultureInfo.InvariantCulture);;
我发现上面的方法不起作用,而下面的方法有效,
DateTime.ParseExact("20150105 091353", "yyyyMMdd HHmmss", CultureInfo.InvariantCulture);;
我想知道第一行代码有什么问题。
答案 0 :(得分:1)
根据MSDN
如果不在自定义格式模式中使用日期或时间分隔符,请使用provider参数的不变区域性和每个自定义格式说明符的最宽格式。例如,如果要在模式中指定小时数,请指定更宽的形式“HH”,而不是更窄的形式“H”。
这意味着这是正确的DateTime.ParseExact("20150105 9:13:53", "yyyyMMdd H:mm:ss", CultureInfo.InvariantCulture);
因为它正在使用时间分隔符
答案 1 :(得分:1)
这是Custom DateTime
格式可能导致输入不明确的特殊情况之一。
如果在小时和分钟之间没有分隔符,则单H
格式无法区分第二个数字属于小时或分钟,因此您的解析失败。
91353 //interpreted either as 9 13 53 or 91 35 3 - which one? ambiguous -> error
但这没关系:
string str = "20150105 9:13:53"; //no ambiguity with format yyyyMMdd H:mm:ss
string fmt = "yyyyMMdd H:mm:ss"; //can handle both "20150105 9:13:53" and "20150105 09:13:53"
DateTime dt = DateTime.ParseExact(str, fmt, CultureInfo.InvariantCulture);
要解决此问题,请尝试对原始string
进行一些操作。
string dtstr = "20150105 91353";
string fmt = "yyyyMMdd Hmmss";
string[] parts = dtstr.Split(' ');
string str = parts[1].Length < 6 ? string.Join(" 0", parts) : dtstr;
DateTime dt = DateTime.ParseExact(str, fmt, CultureInfo.InvariantCulture);
然后应该没问题。