将自定义格式的字符串转换为DateTime

时间:2015-06-17 01:41:30

标签: c# datetime

我正在尝试将字符串转换为DateTime

DateTime newDate = new DateTime();
DateTime.TryParse("20150620 800", out newDate);

返回默认值(1/1/0001 12:00:00 AM),如何正确转换?

2 个答案:

答案 0 :(得分:6)

使用ParseExact获取自定义字符串并进行转换,

根据MSDN:

  

如果format是自定义格式模式,不包含日期或   时间分隔符(例如“yyyyMMdd HHmm”),使用不变的文化   提供者参数和每种自定义格式的最宽格式   符。例如,如果要以格式指定小时数   模式,指定更宽的形式,“HH”,而不是更窄的形式,   “H”。

除非您更改输入数据,否则无法进行此转换。

你会期望这个有效:(这在写这篇文章的过程中让我感到很困惑)

DateTime newDate = DateTime.ParseExact("20150620 800", "yyyyMMdd Hmm", CultureInfo.InvariantCulture);

但由于H必须是最广泛的形式,因此它必须是HH,因为它认为80超出了小时测量的范围。您需要在800之间添加空格,或在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日期格式字符串引用,以确保它是您想要的。