Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.TryParseExact不稳定结果_C#_Datetime - Fatal编程技术网

C# DateTime.TryParseExact不稳定结果

C# DateTime.TryParseExact不稳定结果,c#,datetime,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", "yyMMddH

使用下面的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
输入返回预期格式,而
1402110915
返回不需要的格式,我将不胜感激

很明显,您错了

当格式为
yyMMddHHmmss
时,它将第一个
2
数字作为一年,在本例中为
14
,并自动转换为
2014

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

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

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

作为Marcin,您的字符串输入与
yymmddhmm
yyy-MM-dd-HH:MM:ss
格式不匹配


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

无论
yyMMddHHmm
还是
YYYYYY MM dd HH:MM:ss
都与输入不匹配string@MarcinJuraszek是的,你说得对。但它与
yymmdhhmms
yyyyMMddHHmm
格式匹配。从字符串表示的格式来看,必须至少与指定格式中的一种完全匹配。您的答案没有完全说明为什么它有时选择一种格式,有时选择另一种格式,这似乎是因为在1402110915值的情况下,“0915”是一个有效的时间,但确实与第一种模式匹配,而对于140211084947,“4947”不是,因此尝试了后续模式。@当我写这个答案(在问题的第一次修订中)时,Iridium OP只有
140211090915
作为输入字符串。我想他很快就把它加入了他的问题中,甚至对他的问题都没有影响。你当然有一个观点,
4947
HHmm
格式不匹配,但它与
mmss
格式匹配(添加到我的答案中)。这就是为什么
DateTime.TryParseExact
在这种情况下不会失败的原因。Soner关于我在创建问题后快速添加额外输入字符串的说法是正确的。我不知道格式的顺序很重要,但这是在经过一些测试之后(谢谢@Iridium)