使用下面的DateTime.TryPaseExact方法在预期的时候给我不同的输出。
我从下面的代码中得到以下格式:
2014-02-10 18:32:37
1402-10-18 17:23:00 (which is clearly incorrect)
如何返回yyyy-MM-dd HH:mm:ss
格式?
static readonly string[] DateFormats = new string[] { "yyMMddHHmm", "yyyyMMddHHmm", "yyMMddHHmmss", "yyyy-MM-dd HH:mm:ss" };
DateTime date;
DateTime.TryParseExact("140211090915", DateFormats, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out date);
此外,如果有人能解释为什么140211084947
输入返回预期格式,而140211090915
返回不需要的格式,我将感谢
很明显你错了。
当格式为yyMMddHHmmss
时,它采用第一个2
数字作为年份,在这种情况下为14
,并自动转换为2014
。
当格式类似于yyyy....
时,它将第一个4
数字作为一年,在您的情况下是1402
。
来自The "yy" Custom Format Specifier
在解析操作中,使用"yy"解析的两位数年份自定义格式说明符基于格式提供程序当前的
Calendar.TwoDigitYearMax
属性日历
来自Calendar.TwoDigitYearMax
属性
此属性允许将2位数的年份正确转换为4位数年份例如,如果此属性设置为2029100年的范围是从1930年到2029年。因此,2位数的值为30被解释为1930,而2位数的值29被解释为2029.
正如Marcin提到的,您的字符串输入与yyMMddHHmm
和yyyy-MM-dd HH:mm:ss
格式不匹配。
您的140211084947
字符串与yyMMddHHmmss
格式匹配,但与yyyyMMddHHmm
格式不匹配(因为49
不是有效小时)