为什么第一个日期字符串返回false ?

本文关键字:false 返回 字符串 第一个 日期 为什么 | 更新日期: 2023-09-27 18:17:34

我试图解析字符串,看看它们是否有效的日期。我使用了几种文化和格式来覆盖日期的不同变化。

功能方面,下面的代码似乎工作得很好,但我不能理解为什么第一个字符串返回'False'。是不是一个有效的MM-dd-yyyy格式的日期字符串?

public class Program
        {
           public static CultureInfo frc = new CultureInfo("fr-FR");
            public static CultureInfo usc = new CultureInfo("en-US");
            public static CultureInfo gbc = new CultureInfo("en-GB");
            public static CultureInfo inc = new CultureInfo("en-IN");
            public static string[] dateFormats = { "d-M-yy", "dd-MM-yyyy","d-M-yyyy", "dd MMMM yyyy", "dMyy", "dMyyyy", "d/M/yy", "d/M/yyyy" };
            public static void Main()
            {
                bool isValidDate = false;
                string[] listOfDates = { "10-23-2016", "3-01-93", "14-4-1973", "22 Juin 2015", "Mama, I'm comin home!", "06/06/06" };
                foreach (var date in listOfDates)
                {
                     isValidDate = Validate(date, dateFormats);
                     Console.WriteLine("The string is, {0} and the date validity is {1}",date, isValidDate);
                }
               Console.ReadLine();
            }

            public static bool Validate(string s, string[] format)
            {
                DateTime frDt,enUDt, enGDt, enIDt ;

                bool fr,engU,engG, engI;
                   CultureInfo[] cis = { frc,usc,gbc,inc };
                    fr = DateTime.TryParseExact(s, format, cis[0], DateTimeStyles.None, out frDt);
                    engU = DateTime.TryParseExact(s, format, cis[1], DateTimeStyles.None, out enUDt);
                    engG = DateTime.TryParseExact(s, format, cis[2], DateTimeStyles.None, out enGDt);
                    engI = DateTime.TryParseExact(s, format, cis[3], DateTimeStyles.None, out enIDt);
                    if (fr || engU || engG||engI == true)
                    {
                        return true;
                    }         
                    return false;
            }

        }

为什么第一个日期字符串返回false ?

第一个日期字符串是10-23-2016

23不是有效的月份。所以dd-MM-yyyy会失败