.net 在isDate()或Datetime.TryParse中指定CultureInfo

.net 在isDate()或Datetime.TryParse中指定CultureInfo,.net,vb.net,date,date-format,cultureinfo,.net,Vb.net,Date,Date Format,Cultureinfo,我需要确定字符串是否是格式为dd.mm.yyyy的日期 但是,应用程序运行在具有不同语言设置的系统上。因此,在“有效”字符串上使用isDate或TryParse在德语系统上返回true(因为这些函数使用CultureInfo.CurrentCulture),在具有英语系统设置的系统上返回false 是否有函数检查字符串是否是指定CultureInfo的有效日期 当然,我总是可以使用regex来验证这一点,但我无法想象这是必要的。似乎我错过了TryParse方法的重载: Dim myculture

我需要确定字符串是否是格式为
dd.mm.yyyy
的日期

但是,应用程序运行在具有不同语言设置的系统上。因此,在“有效”字符串上使用
isDate
TryParse
在德语系统上返回true(因为这些函数使用
CultureInfo.CurrentCulture
),在具有英语系统设置的系统上返回false

是否有函数检查字符串是否是指定CultureInfo的有效日期


当然,我总是可以使用regex来验证这一点,但我无法想象这是必要的。

似乎我错过了TryParse方法的重载:

Dim myculture As New System.Globalization.CultureInfo("en-US")
myculture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"
myculture.DateTimeFormat.LongDatePattern = "dd/MM/yyyy"

If DateTime.TryParse("27/10/2010", myculture, Globalization.DateTimeStyles.None, New DateTime) Then

'Currect Date

End If

很好用。(有关详细信息,请参阅)

如果您知道字符串的格式,并且该格式不会更改,则应使用
DateTime.TryParseExact
使用
不变量区域性

Imports System.Globalization

Dim dateString As String = "31.12.1901"
Dim dateValue As Date
Dim dateFormat As String = "dd.MM.yyyy"

If DateTime.TryParseExact(dateString, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, dateValue) Then
    'In the format expected
Else
    'NOT in the format expected
End If

你需要使用不变量文化,否则这不会像你期望的那样起作用。我认为我理解错了,因为不变量文化依赖于英语,不是吗?因此,我不能通过不变量文化,仍然得到想要的结果?不过,上面的代码只是我提供的链接中的一个通用示例。在我的应用程序中,我传递了一个专用的CultureInfo对象,该对象在多个地方使用。不,不变的区域性本质上没有特定的区域性或语言。你真的想按照@MattWilko的回答来做。首先,因为不变的文化事物;但这也是因为
TryParse
往往比
TryParseExact
慢几个数量级——有关详细信息,请参阅。