C# DateTime.TryParseExact不稳定结果
使用下面的DateTime.TryPaseExact方法可以在预期的情况下提供不同的输出 下面的代码返回了以下格式: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
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)