DateTime.TryParseExact结果不稳定



使用下面的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提到的,您的字符串输入与yyMMddHHmmyyyy-MM-dd HH:mm:ss格式不匹配。

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

最新更新