如果您只为TryParseExact 指定一种格式,那么它会尝试。 Parse 尝试所有格式,直到找到最佳匹配或找到第一个匹配。 (我不确定是哪个。)几周前我用定制的 CultureInfo 做了这个。我没有测试性能,但我确实针对存储在数据库中的 61,880 个日期对我的解析方法(没有自定义的 CultureInfo,见下文)运行了单元测试。我没有发现任何性能问题。
无论是否指定 CultureInfo,如果没有传递,内部解析例程将使用 CultureInvariant。因此,CultureInfo 不会减慢该过程。 (由于需要额外的解析,希伯来语和其他“异国情调”日期的性能会受到影响。)根据我对 DateTime 源代码的审查,字符串格式的数量决定了这些例程解析日期字符串的速度。格式越多,速度越慢。如果您只指定一个,则解析速度与使用 ...Exact 方法一样快。
Imports System.Globalization
Public Class ExifDateTime
Private Shared _formats() As String = New String() { _
"yyyy:MM:dd", _
"yyyy:MM:dd HH:mm:ss", _
"yyyy:MM:dd HH:mm:ss.f", _
"yyyy:MM:dd HH:mm:ss.ff", _
"yyyy:MM:dd HH:mm:ss.fff", _
"yyyy:MM:dd HH:mm:ss.fffK", _
"yyyy:MM:dd HH:mm:ss.ffffffK", _
"yyyy:MM:dd HH:mm:ssK", _
""}
Public Shared Function Parse(ByVal s As String) As Date
Dim oResult As Date
If TryParse(s, DateTimeStyles.None, oResult) = False Then
Throw New FormatException
End If
Return oResult
End Function
Public Shared Function Parse(ByVal s As String, ByVal style As System.Globalization.DateTimeStyles) As Date
Dim oResult As Date
If TryParse(s, style, oResult) = False Then
Throw New FormatException
End If
Return oResult
End Function
Public Shared Function TryParse(ByVal s As String, ByRef result As Date) As Boolean
Return TryParse(s, DateTimeStyles.None, result)
End Function
Public Shared Function TryParse(ByVal s As String, ByVal style As System.Globalization.DateTimeStyles, ByRef result As Date) As Boolean
Dim fResult As Boolean
Dim oResultant As Date
fResult = Date.TryParseExact(s, _formats, CultureInfo.InvariantCulture, style, oResultant)
If fResult Then
result = oResultant
End If
Return fResult
End Function
End Class