2009-02-19 66 views
0

我有DateTime數據類型的問題。通過一個文本框我想添加人物生日。由於在C#中沒有日期數據類型,我不得不使用DateTime數據類型,但在將TxtDateofBirth轉換爲DateTime時出現錯誤,「字符串未被識別爲有效的DateTime」。這是我的轉換代碼。我在添加事件中保留了這段代碼。DateTime數據類型的問題

DateTime dateofbirth = Convert.ToDateTime(TxtDateOfBirth.Text); 

我該怎麼辦?

感謝,

Masum

回答

3

使用DateTime.ParseExact與格式字符串,只有指定的日期部分。

或者,因爲這是用戶輸入,使用DateTime.TryParseExact所以你不需要捕捉異常,如果用戶輸入了錯誤的日期:

using System; 

class Test 
{ 
    static void Main() 
    { 
     TestParsing("24/10/2009"); 
     TestParsing("flibble"); 
    } 

    static void TestParsing(string text) 
    { 
     DateTime dt; 

     if (DateTime.TryParseExact(text, "d", null, 0, out dt)) 
     { 
      Console.WriteLine("Parsed to {0}", dt); 
     } 
     else 
     { 
      Console.WriteLine("Bad date"); 
     } 
    } 
} 

注意格式字符串「D」是指「短日期格式「(請參閱MSDN中的"standard date and time form at strings""custom date and time format strings"頁)。 「null」的意思是「使用當前的文化」 - 所以上述在英國適用於我,但您需要在美國製作字符串「10/24/2009」。如果您不想使用該線程的當前默認值,則可以指定特定的文化。 0表示默認的日期和時間樣式。查看MSDN頁面以獲取更多信息。

1

或者,use a mask這樣用戶只能輸入有效的日期。 (請參見下面的例子C#的部分中給出的鏈接)

1

幾乎沒有任何一個可以添加到喬恩的答案,但在這種情況下,我想提出一個觀點:

試着瞭解你的問題不是因爲DateTime數據類型,而是因爲日期字符串與預期的格式(基於區域設置/線程文化)不匹配DateTime構造函數。

你說你被迫使用DateTime數據類型。你應該記住,日期應該總是被視爲日期。我看到太多的開發人員陷入了將日期用作字符串(並執行分割/搜索操作)而不是使用DateTime的陷阱,因爲他們認爲後者太複雜。