DateTime:要求用户输入时间组件

时间:2010-04-21 09:33:57

标签: .net datetime parsing date-parsing

检查用户输入是有效日期还是有效“日期+时间”很简单:.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将是所有可能组合的大型列表(一位数,两位数,......)。

有更优雅的解决方案吗?

3 个答案:

答案 0 :(得分:2)

我不确定这比你现有的更优雅,但是如何:

  • 按空格分割修剪后的输入
  • 在最后一块
  • 上做TimeSpan.TryParse
  • 如果此操作成功,请检查生成的TimeSpan的值是否为非负值,且不到一天

除了整个字符串DateTime.TryParse之外,还要执行所有操作,您应该更有信心指定了时间组件。

答案 1 :(得分:1)

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

另一个解决方案是使用某种屏蔽控制,你不强制执行d / m / y顺序,但是你强制执行MM:SS,这在每个cuture中都是相同的。

不是问题的答案,但是

答案 2 :(得分:0)

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

CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern

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

dd MMMM yyyy HH:mm:ss