2

检查用户输入是有效日期还是有效的“日期+时间”很容易:.NET 提供DateTime.TryParse(此外,VB.NET 提供IsDate)。

现在,我想检查用户是否输入了包含时间组件的日期。因此,当使用德语语言环境时,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这将是一个包含所有可能组合(一位数、两位数……)的相当大的列表。

有没有更优雅的解决方案?

4

3 回答 3

2

我不确定这是否比您已经拥有的更优雅,但是如何:

  • 用空格分割修剪后的输入
  • TimeSpan.TryParse在最后一块上做一个
  • 如果成功,请检查结果的值TimeSpan是否为非负数,并且小于一天

除了DateTime.TryParse在整个字符串上执行所有这些操作,您应该更有信心指定时间组件。

于 2010-04-21T10:08:09.083 回答
1

我认为您应该将用户输入、文本框中的日期(或其他)和时间拆分为另一个。

另一种解决方案是使用某种蒙面控制,您不强制执行 d/m/y 顺序,但您确实强制执行 MM:SS,这在每个文化中都是相同的。

不完全是问题的答案,但是

于 2010-04-21T14:17:06.763 回答
0

您可以从CultureInfo.DateTimeFormat属性获取文化的日期/时间格式选项。因此,例如,要获取当前文化的完整日期/时间模式,您将访问:

CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern

对我来说,在英国,这给出了:

dd MMMM yyyy HH:mm:ss
于 2010-04-21T09:47:02.227 回答