2010-04-21 36 views
2

檢查用戶輸入是有效日期還是有效的「日期+時間」很容易:.NET提供了DateTime.TryParse(此外,VB.NET還提供了IsDate)。DateTime:要求用戶輸入時間組件

現在,我想檢查用戶是否輸入日期,包括時間部分。所以,在使用德語語言環境時,31.12.2010 00:00應該可以,但31.12.2010不應該。

我知道我可以使用DateTime.TryParseExact這樣的:

Dim formats() As String = {"d.M.yyyy H:mm:ss", "dd.M.yyyy H:mm:ss", _ 
          "d.MM.yyyy H:mm:ss", "d.MM.yyyy H:mm:ss", _ 
          "d.M.yyyy H:mm", ...} 
Dim result = DateTime.TryParseExact(userInput, formats, _ 
     Globalization.CultureInfo.CurrentCulture, ..., result) 

但隨後我就硬編碼指定日期(日點月點年)的德國格式,這被認爲是不好的做法,並會鬧事我們是否應該想要本地化我們的應用程序。此外,formats將是所有可能組合(一位數,兩位數......)的相當大的列表。

有沒有更優雅的解決方案?

+0

我目前使用'則IsDate(userInput)'和'Regex.IsMatch結合(userInput, 「\ d:\ d」)',它大概會對於我們將來可能支持的每個地區都能很好地工作,但是,這仍然是一個醜陋的黑客。 – Heinzi 2010-04-21 09:42:47

回答

2

我不知道這是任何比你已經有了更優雅,但如何:

  • 分裂空格
  • 修剪輸入做一個TimeSpan.TryParse最後一塊
  • 如果成功,檢查導致TimeSpan的值大於天非負,少

做的一切,除了DateTime.TryParse的字符串作爲一個整體,你應該有更多的信心有一個指定的時間組件。

0

您可以從CultureInfo.DateTimeFormat屬性獲取文化的日期/時間格式選項。因此,舉例來說,以獲取當前區域性的完整日期/時間模式,你會訪問:

CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern 

對於我來說,在英國,這給:

dd MMMM yyyy HH:mm:ss 
+0

感謝您的輸入,但這不會幫助我解決問題:爲了方便用戶使用,我不僅需要接受'dd MMMM yyyy HH:mm:ss',還需要接受'dd MMMM yyyy HH:mm因此,我需要一些(基本上)接受'DateTime.TryParse'接受的所有格式,並且必須指定一個時間分量。 – Heinzi 2010-04-21 10:00:36

1

我認爲你應該分割用戶輸入,日期在一個文本框(或其他)和時間在另一個。

另一種解決方法是使用某種蒙面控制,在這種控制中你不強制執行d/m/y命令,但是你執行了MM:SS,這在每個圖形中都是一樣的。

不太答案的問題,但HTH