2015-10-29 84 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