2008-11-11 117 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); 

我做过类似的东西我自己。