2016-11-10 2 views
-2

Я пытаюсь разобрать строки, чтобы узнать, являются ли они действительными датами. Я использую несколько культур и форматов, чтобы охватить различные варианты дат.Почему первая строка даты возвращает false?

Функциональность мудрая, код, как представляется, работает нормально, но я не могу понять, почему первая строка возвращает «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; 
      } 


     } 
+2

Первой строкой будет 10-й день 23-го месяца 2016 года, это звучит правильно для вас? –

+0

Отредактировал вопрос сейчас. Это фактически формат MM-dd-yyyy, 23 октября 2016 года. – AKrishna

+0

Хорошо, Редактирование questikn не изменяет того факта, что вы никогда не учитываете этот формат в своем коде –

ответ

4

Первая строка дата 10-23-2016

23 не действует месяц. Так что dd-MM-yyyy потерпит неудачу.

Смежные вопросы