我正在尝试将字符串转换为DateTime
:
DateTime newDate = new DateTime();
DateTime.TryParse("20150620 800", out newDate);
返回默认值(1/1/0001 12:00:00 AM
),如何正确转换?
答案 0 :(得分:6)
使用ParseExact
获取自定义字符串并进行转换,
根据MSDN:
如果format是自定义格式模式,不包含日期或 时间分隔符(例如“yyyyMMdd HHmm”),使用不变的文化 提供者参数和每种自定义格式的最宽格式 符。例如,如果要以格式指定小时数 模式,指定更宽的形式,“HH”,而不是更窄的形式, “H”。
除非您更改输入数据,否则无法进行此转换。
你会期望这个有效:(这在写这篇文章的过程中让我感到很困惑)
DateTime newDate = DateTime.ParseExact("20150620 800", "yyyyMMdd Hmm", CultureInfo.InvariantCulture);
但由于H
必须是最广泛的形式,因此它必须是HH
,因为它认为80
超出了小时测量的范围。您需要在8
和00
之间添加空格,或在0
之前添加8
。
这些解决方案可行:
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);
答案 1 :(得分:0)
DateTime.ParseExact(newDate,"yyyyMMdd Hmm", new DateFormatInfo());
应该有效。仔细检查.Net日期格式字符串引用,以确保它是您想要的。