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