C# DateTime.TryParse返回月份的意外值

C# DateTime.TryParse返回月份的意外值,c#,C#,下面代码A和代码B分段的ParseExact方法返回的是月份=1而不是12。为什么?请注意,没有提出例外情况。Thx cult = CultureInfo.InvariantCulture; //Code A //This code sets dt2=01/01/2009, with month = 01 not 12! cult = CultureInfo.InvariantCulture; DateTime dt

下面代码A和代码B分段的ParseExact方法返回的是月份=1而不是12。为什么?请注意,没有提出例外情况。Thx

        cult = CultureInfo.InvariantCulture;
        //Code A
        //This code sets dt2=01/01/2009, with month = 01 not 12!
        cult = CultureInfo.InvariantCulture;
        DateTime dt2 = DateTime.ParseExact("2009-12-1", "yyyy-m-d", cult);
        printIt(dt2);

        //Code B
        //This code sets dt3=01/01/2009, with month = 01 not 12!
        DateTime dt3 = DateTime.ParseExact("2009-12-1", "yyyy'-'mm'-'d", cult);
        printIt(dt3);

        //Code C
        //This code works and sets dt4=12/01/2009
        DateTime dt4 = DateTime.Parse("2009-12-1",  cult);
        printIt(dt4);

小写的
m
是分钟,您必须使用
MM

例如,该示例可以工作:

DateTime dt2 = DateTime.ParseExact("2009-12-1", "yyyy-MM-d", cult);

通过查看格式字符串的实际含义,可以很容易地回答这个问题。谢谢7年前我也遇到过同样的问题,我想那是因为甲骨文。。。