2015-10-29 43 views
0

我正在处理日历。在这里我想检查用户输入的是日期还是不显示错误。我听说DateTime.TryParse。我如何正确使用它?也许任何人都可以用简单的话来解释它?C#检查输入是否有效日期

public void addMeeting() 
    { 
     string readAddMeeting; 
     var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; // I copied this 

     Console.WriteLine("Add a schedule for specific dates: "); 

     readAddMeeting = Console.ReadLine(); 
    } 
+0

循环在你的格式排列,直到你成功地解析输入,如果没有成功,直到最后搞定。 – kirotab

+1

https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx在如何使用tryparse本身有一个很好的例子 – Thomas

回答

6

使用DateTime.TryParseExact这样:

public void addMeeting() 
{ 
    var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; 
    Console.WriteLine("Add a schedule for specific dates: "); 
    string readAddMeeting = Console.ReadLine(); 
    DateTime scheduleDate; 
    bool validDate = DateTime.TryParseExact(
     readAddMeeting, 
     dateFormats, 
     DateTimeFormatInfo.InvariantInfo, 
     DateTimeStyles.None, 
     out scheduleDate); 
    if(validDate) 
     Console.WriteLine("That's a valid schedule-date: {0}", scheduleDate.ToShortDateString()); 
    else 
     Console.WriteLine("Not a valid date: {0}", readAddMeeting); 
} 

该方法返回一个bool表明它是否能够被解析与否,你传递一个DateTime变量作为out参数,如果日期是其中将被初始化有效。

请注意,我使用DateTimeFormatInfo.InvariantInfo,因为您不想使用本地DateTime格式,但可以在任何文化中工作。否则/dd/MM/yyyy将被您当前的文化的日期分隔符替换。 Read

+0

很好找到TryParseExact!没有想到它会在只采用字符串方面有所不同DateTimeFormats(我不明白为什么TryParse只接受字符串,而TryParseExact也接受整个字符串数组)。很好找! – Thomas

+0

好吧,我只是复制你的代码,看看会发生什么。但它显示了“名称DateTimeFormatInfo和DateTimeStyles在当前上下文中不存在”。我究竟做错了什么? – user5462581

+0

@ user5462581:你必须添加'使用System.Globalization'或者写出'System.Globalization.DateTimeFormatInfo.InvariantInfo'。我更喜欢前者。 –

0

即使听起来有点残忍,但它似乎应该对数组/列表,foreach循环和DateTime.TryParse做一些readup。

除了你有不同的可能的日期格式,并希望看看其中一个是否有效。如果我们把例如从MSDN主页为的TryParse https://msdn.microsoft.com/en-us/library/ch92fbc1(v=vs.110).aspx和使用的foreach它变得相当容易:

public void addMeeting() 
{ 
    string readAddMeeting; 
    var dateFormats = new[] {"dd.MM.yyyy", "dd-MM-yyyy", "dd/MM/yyyy"}; // I copied this 
    bool isDateOk = false; 

    Console.WriteLine("Add a schedule for specific dates: "); 

    readAddMeeting = Console.ReadLine(); 

    foreach (string myDateFormat in dateFormats) 
    { 
     DateTime dateValue; 
     if (DateTime.TryParse(readAddMeeting, dateValue)) 
     { 
      isDateOk = true; 
     } 
    } 

    if (isDateOk == false) 
    { 
     Console.Writeline("Sorry this is not a valid date"); 
    } 
} 
+0

是的,我应该做这个东西一些readup。我对编程非常新颖。 – user5462581