C#DateTime Parser Bug?

时间:2012-02-14 14:27:41

标签: c# parsing datetime

下式给出:

        DateTime parsedDate;

        if (DateTime.TryParseExact("0992012", "ddMyyyy", null, DateTimeStyles.NoCurrentDateDefault, out parsedDate))
        {
            Debug.WriteLine("YES");
        }
        else
        {
            Debug.WriteLine("NO");
        }

为什么输出为NO?这是一个错误吗?

2 个答案:

答案 0 :(得分:6)

这是一个糟糕的格式,基本上 - 我不知道它是否指定是否应该被接受,但是在其他数字字段旁边包括一个可变宽度数字字段而没有任何分隔符是非常糟糕的主意

怀疑解析器将此视为09,然后将92视为“当月的1或2位数”并且没有意识到2意味着属于年份部分。那就是Noda Time解析器会做的事情,至少......

如果您无法更改输入格式,则应在尝试解析之前就地按摩数据 - 例如

if (text.Length == 7)
{
    text = text.Substring(0, 2) + "0" + text.Substring(2);
}
// Now parse as ddMMyyyy

答案 1 :(得分:3)

我怀疑它与M代码是一个或两位数的月份有关。如果没有分隔符,那么确定月份结束和年份开始的地点并非易事。