如何使用" yyyyMMdd Hmm"将字符串解析为DateTime。格式?

时间:2015-12-10 08:57:19

标签: c# .net parsing datetime

我在解决这个问题上遇到了很大的问题。我试图使用Datetime.ParseExact()来解析字符串。

我有以下代码:

DateTime.ParseExact("20151210 832", "yyyyMMdd Hmm", CultureInfo.InvariantCulture);

我收到以下错误:

  

未处理的类型' System.FormatException'发生在   mscorlib.dll其他信息:字符串未被识别为   有效的DateTime。

我做错了什么?我该如何解决这个问题?

更新

我也可以得到这样的时间:

00:01 => 1
01:00 => 1
01:10 => 10

2 个答案:

答案 0 :(得分:5)

由于H说明符可以为2位,因此此方法会尝试使用83说明符解析H。由于没有这么一小时,你得到FormatException

对于您的情况,防止这种情况的一种方法是在8之前设置前导零。

var s = "20151210 832";
var result = s.Split(' ')[0] + " 0" + s.Split(' ')[1];
var dt = DateTime.ParseExact(result, "yyyyMMdd Hmm", CultureInfo.InvariantCulture);

请注意,适用于所有情况。例如,如果您的小时部分已经两位数,如果您的一分钟没有前导零等等。

或者您可以为所有部分添加分隔符,但在这种情况下,您需要操纵字符串和格式。

.NET Team suggest this way as well

答案 1 :(得分:0)

只需在分钟前插入分隔符(例如,空格),然后就可以像这样解析它:

string example = "20151210 832";
example = example.Insert(example.Length - 2, " ");
var dateTime = DateTime.ParseExact(example, "yyyyMMdd H mm", CultureInfo.InvariantCulture);

我假设日期时间字符串总是包含两个指定分钟的数字(查看有关Custom Date and Time Format Strings的文章)。如果我的假设是错误的,则无法解析此字符串。