DateTime TryParseExact和填充

时间:2016-04-01 10:18:38

标签: c# .net datetime

我在一个我想要解析为TryParse的字符串上调用DateTime。简单的东西。当格式符合我的预期时,一切正常。但是当日期的每个组件/某些组件都是单个数字时,解析就会失败。

示例:

var dateFormat = "yyyy-dd-MM hh:mm:ss";
var dateString = "2006-4-1 2:3:5";

DateTime.TryParseExact(dateString, dateFormat, 
                       CultureInfo.InvariantCulture, DateTimeStyles.None, out result)

如果我将dateString更改为"2006-04-01 02:03:05",则解析正常。

问题

如何告诉解析器将2解释为02,以便上述解析成功?

我尝试了什么

手动填充日期时间的每个部分,以确保其符合格式。这样可行,但感觉不是很优雅。这是唯一的方法吗?

我也尝试过使用像m而不是mm这样的格式,但没有成功。

2 个答案:

答案 0 :(得分:5)

只需使用

 // please note single letters (d, M, h, m, s) whenever you allow single digits
 var dateFormat = "yyyy-d-M h:m:s";

你会得到它:

var dateString = "2006-4-1 2:3:5";

DateTime.TryParseExact(dateString, dateFormat, 
                       CultureInfo.InvariantCulture, DateTimeStyles.None, out result)

答案 1 :(得分:1)

使用正则表达式:

int[] n = new Regex("[^0-9]+").Split("2006-4-1 2:3:5").Select(int.Parse).ToArray();
var datetime = new DateTime(n[0], n[1], n[2], n[3], n[4], n[5]);