如何将国际日期字符串解析为DateTime对象? VB.NET

时间:2016-03-11 21:33:17

标签: vb.net date parsing datetime

我在表单中有几个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失败。

注意:我的代码需要处理国际和非国际日期,可以同时处理这两个日期。

1 个答案:

答案 0 :(得分:1)

一般情况下,永远不要使用DateTime.ParseDateTime.TryParse - 因为他们默认使用您的用户帐户的默认日期格式 - 如果您在美国,那么MM/dd/yyyy(几乎是世界其他地方都使用dd/MM/yyyy)。

如果您事先知道他们使用的格式,请使用DateTime.ParseExactDateTime.TryParseExact

DateTime value = DateTime.ParseExact("dd/MM/yyy", input);

如果您知道该用户来自特定国家/地区但不确定该格式,请指定明确的CultureInfo

DateTime value = DateTime.Parse( CultureInfo.GetCulture("en-CA"), input);