使用下面的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
会返回不需要的格式,我将不胜感激
答案 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 ,您的字符串输入与yyMMddHHmm
和yyyy-MM-dd HH:mm:ss
格式不匹配。
您的140211084947
字符串与yyMMddHHmmss
格式匹配但与yyyyMMddHHmm
格式不匹配(因为49
不是有效小时)