Если вы укажете только один формат для TryParseExact
, это все, что он попробует. Parse
пробует все форматы, пока не будет найдено наилучшее совпадение или не будет найдено первое совпадение. (Я не уверен, что.) Я сделал это несколько недель назад, с настроенным CultureInfo. Я не тестировал производительность, но я выполнял модульные тесты на моих методах синтаксического анализа (без настроенного CultureInfo, см. Ниже) против 61 880 дат, хранящихся в базе данных. Я не заметил никаких проблем с производительностью.
Независимо от того, указали ли вы 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