DateTime.TryParseExact不稳定的结果

Bos*_*oss 2 c# datetime

使用下面的DateTime.TryPaseExact方法可以在预期的时候给出不同的输出.

我从以下代码返回以下格式:

2014-02-10 18:32:37
1402-10-18 17:23:00 (which is clearly incorrect)
Run Code Online (Sandbox Code Playgroud)

我如何才能获得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);
Run Code Online (Sandbox Code Playgroud)

此外,如果有人可以解释为什么此140211084947输入返回预期的格式并140211090915返回不需要的格式,我将不胜感激

Son*_*nül 5

很明显你错了.

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

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

The "yy" Custom Format Specifier

在解析操作中,使用"yy"自定义格式说明符解析的两位数年份将根据Calendar.TwoDigitYearMax格式提供程序的当前日历的属性进行解释 .

来自Calendar.TwoDigitYearMax物业

此属性允许将2位数年份正确转换为4位数年份.例如,如果此属性设置为2029,则100年范围为1930年至2029年.因此,2位数值30将被解释为1930,而2位数值29则被解释为2029.

正如Marcin 所说,你的字符串输入yyMMddHHmmyyyy-MM-dd HH:mm:ss格式不匹配.

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

  • 你的答案并没有完全涵盖为什么它有时选择一种格式,有时候另一种格式,因为在140211090915值的情况下,"0915"是一个有效时间,与第一种模式匹配,而对于140211084947,"4947"不是,因此尝试了后续模式. (2认同)