我正在尝试将字符串转换为DateTime
:
DateTime newDate = new DateTime();
DateTime.TryParse("20150620 800", out newDate);
返回默认值(1/1/0001 12:00:00 AM
),如何正确转换?
使用 ParseExact
获取自定义字符串并对其进行转换,
根据MSDN:
如果格式是不包含日期或 时间分隔符(如"yyyyMMdd HHmm"),使用固定区域性 提供程序参数和每种自定义格式的最宽形式 规范。例如,如果要以以下格式指定小时数 模式,指定更宽的形式"HH",而不是较窄的形式, "H"。
除非您更改输入数据,否则无法进行此转换。
你会期望这能工作:(这在写这篇文章时真的让我有点困惑)
DateTime newDate = DateTime.ParseExact("20150620 800", "yyyyMMdd Hmm", CultureInfo.InvariantCulture);
但是由于H
必须处于最宽的形式,因此它必须是HH
的,因为它认为80
超出了小时测量的范围。您需要在 8
和 00
之间添加一个空格,或者在 8
之前添加一个0
。
这些解决方案将起作用:
DateTime newDate = DateTime.ParseExact("20150620 8 00", "yyyyMMdd H mm", CultureInfo.InvariantCulture);
DateTime newDate = DateTime.ParseExact("20150620 0800", "yyyyMMdd HHmm", CultureInfo.InvariantCulture);
如果无法更改此输入数据(例如,从数据库更改),只需执行子字符串操作以在分钟和小时之间插入一个空格,以便 .NET 可以判断哪个是哪个:
var text = "20150620 800";
DateTime newDate = DateTime.ParseExact(text.Insert(text.Length - 2, " "), "yyyyMMdd H mm", CultureInfo.InvariantCulture);
DateTime.ParseExact(newDate,"yyyyMMdd Hmm", new DateFormatInfo());
应该工作。仔细检查 .Net 日期格式字符串引用,以确保它是您想要的。