2008-11-11 119 views
4

我正在研究一個時間表應用程序,我希望用戶能夠在文本框中輸入時間,例如:8 a或8:00 a等,只是就像你可以在Excel中一樣。在文本框中解析沒有日期的時間

現在,如果你在一個文本框中輸入一個日期然後用DateTime.TryParse,您可以在多種格式輸入它(2007年1月31日; 2007年1月31日,31/1/2007; 1月31日, 2007;等等),.NET將會把它變成一個DateTime。

但是,當我使用像「8 a」或「8:00 a」這樣的字符串上的DateTime.TryParse時,它不理解它。

我知道我可以使用ParseExact,但我想知道是否有更靈活的解決方案。我想讓.NET從「8 a」或「8:00 a」獲得8:00a,並且將日期組件保留爲默認1/1/0001。

+0

是否有一個令人信服的理由來使用文本框,而不是,例如System.Windows.Forms.DateTimePicker Format = Time? – 2008-12-16 19:03:43

+1

嗯,這是一個WPF應用程序,所以使用WinForms的東西不是我的第一選擇。 – 2008-12-19 20:10:40

回答

3

想想吧,沒關係。我只注意到,如果我使用「am」和「pm」而不是「a」和「p」,它可以正常工作。它假定今天的日期,而不是默認的1/1/0001,但這對我的目的不是問題。

(不過,任何合理的簡單的解決方案,以獲得「A」和「p」工作是值得歡迎的。)

3

我會重新考慮您的UI功能,並將其替換爲兩個組合框或其他某種形式的時間選取器。

最終,即使世界上最好的時間解析器仍然會失敗白癡用戶測試。

除了這個,Parse.Exact是你需要的。

0

您可以使用驗證或驗證的事件來捕獲文本,並添加「 M」。

4

您可以隨時欺騙系統(很容易):

DateTime blah = DateTime.Parse("1/1/0001 " + myTimeString); 

我做過類似的東西我自己。