DateTime.TryParseExact不稳定的结果

时间:2014-02-11 07:16:12

标签: c# datetime

使用下面的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会返回不需要的格式,我将不胜感激

1 个答案:

答案 0 :(得分:5)

很明显,你错了。

当格​​式为yyMMddHHmmss时,它会将2个数字作为一年,在这种情况下为14并自动转换为2014

当格​​式类似于yyyy....时,它会将4个数字视为一年,在您的情况下为1402

来自The "yy" Custom Format Specifier

  

在解析操作中,使用“yy”解析的两位数年份   自定义格式说明符基于   格式提供程序当前的Calendar.TwoDigitYearMax属性   日历。

来自Calendar.TwoDigitYearMax property

  

此属性允许将2位数年份正确翻译为a   4位数年份。 例如,如果此属性设置为2029,则   100年的范围是从1930年到2029年。因此,2位数值为30   被解释为1930年,而2位数值29被解释为   2029。

由于Marcin mentioned ,您的字符串输入与yyMMddHHmmyyyy-MM-dd HH:mm:ss格式不匹配。

您的140211084947字符串与yyMMddHHmmss格式匹配但与yyyyMMddHHmm格式不匹配(因为49不是有效小时)