我在一个我想要解析为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
这样的格式,但没有成功。
答案 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]);