2016-01-24 7 views
2

Я работаю с C#, и я пытаюсь найти, действительно ли данная дата и месяц действительны для високосного года. Это мой код:Как проверить DateTime на високосный год

static void Main(string[] args) 
    { 
     Console.WriteLine("The following program is to find whether the Date and Month is Valid for an LEAP YEAR"); 
     Console.WriteLine("Enter the Date"); 
     int date = Convert.ToInt16(Console.ReadLine()); //User values for date and month 
     Console.WriteLine("Enter the Month"); 
     int month = Convert.ToInt16(Console.ReadLine()); 
     { 
      if (month == 2 && date < 30)     //Determination of month and date of leap year using If-Else 
       Console.WriteLine("Your input is valid"); 
      else if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) && date < 32) 
       Console.WriteLine("Your inpput valid1"); 
      else if ((month == 4 || month == 6 || month == 9 || month == 11) && date < 31) 
       Console.WriteLine("Your inpput valid2"); 
      else 
       Console.WriteLine("Your input INvalid"); 

      Console.ReadKey(); 
     } 
    }    
    } 
} 

Мой вопрос, могу ли я использовать DateTime для этой программы или же это лучше? Любые предложения приветствуются.

ответ

3

Я предлагаю взять ввод как string, а затем с помощью метода DateTime.TryParse. DateTime.TryParse принимает string и out DateTime (out keyword) и возвращает true, если строковый ввод был правильно разобран и является действительным DateTime и false в противном случае.

Из документации:

Если s является строковым представлением високосного дня в високосном году в текущем календаре, метод разбирает S успешно. Если s является строковым представлением високосного дня в течение не-високосного года в текущем календаре текущей культуры, операция синтаксического анализа выходит из строя и метод возвращает false. Пример

Использование:

Console.WriteLine("Please enter a date."); 

string dateString = Console.ReadLine(); 
DateTime dateValue; 

if (DateTime.TryParse(dateString, out dateValue)) 
{ 
    // Hooray, your input was recognized as having a valid date format, 
    // and is a valid date! dateValue now contains the parsed date 
    // as a DateTime. 
    Console.WriteLine("You have entered a valid date!"); 
} 
else 
{ 
    // Aww, the date was invalid. 
    Console.WriteLine("The provided date could not be parsed."); 
} 
+0

Могу ли я проверить месяц также вышеупомянутым способом? – vikram

+0

Да, это проверит всю дату. Например, пользователь может ввести 1/23/2016 или 1-23-2016. Метод TryParse даже распознает ввод, такой как 23 января 2016 года или Sat, 23 января 2016 года. – johnnyRose

1

Используйте известный скачок год за год части, например, 2000 и добавить месяц, день и год, чтобы сформировать строку типа mm-dd-2000, где mm и dd являются введенными пользователем значениями. Затем используйте метод DateTime.TryParse, который возвращает true, если дата действительна.

2

Вы можете использовать DateTime.DaysInMonth с год, как известно, является високосным, как 2016.

if (month >= 1 && month <= 12 && date >= 1 && date <= DateTime.DaysInMonth(2016, month)) 
    Console.WriteLine("Your input is valid"); 
else 
    Console.WriteLine("Your input is invalid"); 
0

Если вы работаете из отдельных частей, а затем просто:

try 
{ 
    new DateTime(year, month, day); 
} 
catch (ArgumentOutOfRangeException) 
{ 
    // it's not valid 
} 

Хотя, если вы предпочитаете не полагаться на исключения, а затем пойти с ответом юхарра, используя DateTime.DaysInMonth.

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

  • Нет связанных вопросов^_^