我在表单中有几个DateTime输入,显示国际格式。例如,当加拿大用户选择显示为17/03/2016的日期时。我试图将这个字符串解析为一个日期(以确保它的有效日期而不是像#34; cat"),但是解析功能并没有认识到国际日期为有效日期。 unsubscribedFrom 和 unsubscribedTo 是从表单传入的字符串,然后我将其传递给SQL查询
Dim unsubscribedFromDate As DateTime
Dim unsubscribedToDate As DateTime
If DateTime.TryParse(unsubscribedFrom, unsubscribedFromDate) Then
unsubscribedFrom = unsubscribedFromDate.ToEST().ToShortDateString()
PageSectionWhereClause &= "AND es.DateUnsubscribed >= CONVERT(DateTime, '" & unsubscribedFrom & "')" & Environment.NewLine
End If
If DateTime.TryParse(unsubscribedTo, unsubscribedToDate) Then
unsubscribedTo = unsubscribedToDate.ToEST().ToShortDateString()
PageSectionWhereClause &= "AND es.DateUnsubscribed >= CONVERT(DateTime, '" & unsubscribedTo & "')" & Environment.NewLine
End If
当unsubscribedFrom =" 17/03/2016"时,DateTime.TryParse失败。
注意:我的代码需要处理国际和非国际日期,可以同时处理这两个日期。
答案 0 :(得分:1)
一般情况下,永远不要使用DateTime.Parse
或DateTime.TryParse
- 因为他们默认使用您的用户帐户的默认日期格式 - 如果您在美国,那么MM/dd/yyyy
(几乎是世界其他地方都使用dd/MM/yyyy
)。
如果您事先知道他们使用的格式,请使用DateTime.ParseExact
或DateTime.TryParseExact
。
DateTime value = DateTime.ParseExact("dd/MM/yyy", input);
如果您知道该用户来自特定国家/地区但不确定该格式,请指定明确的CultureInfo
:
DateTime value = DateTime.Parse( CultureInfo.GetCulture("en-CA"), input);