Si sólo se especifica un formato para TryParseExact
eso es todo lo intentará Parse
prueba todos los formatos hasta encontrar la mejor coincidencia o encontrar la primera coincidencia. (No estoy seguro de cuál.) Lo hice hace unas semanas, con un CultureInfo personalizado. No probé el rendimiento, pero realicé pruebas unitarias en mis métodos de análisis (sin el CultureInfo personalizado, ver más abajo) contra 61.880 fechas almacenadas en una base de datos. No noté ningún problema de rendimiento.
Independientemente de si especifica un CultureInfo o no, las rutinas internas de análisis utilizarán CultureInvariant si no se pasa ninguna. Por lo tanto, CultureInfo no ralentiza el proceso. (Hay algunos éxitos de rendimiento para hebreo y otras fechas "exóticas" debido al análisis adicional que requieren.) A partir de mi revisión del código fuente de DateTime, la cantidad de formatos de cadenas determina qué tan rápido estas rutinas pueden analizar una cadena de fecha. Cuanto más formato, más lento. Si solo especifica uno, entonces el análisis será lo más rápido posible con los métodos ...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
no estoy seguro de que son funcionalmente diferentes. Inspeccioné el código para ambos métodos e internamente usan los mismos procedimientos. La única diferencia que pude encontrar es que ParseExact usa los formatos que especifique en lugar de todos los formatos para CultureInfo. – AMissico
@AMissico sí, es exactamente por eso que son funcionalmente diferentes. – Sander
@Sander: hmm, veo tu punto. Para mí, entiendo funcionalmente como un cambio en cómo funciona algo. En este caso, la única diferencia son los argumentos pasados a los métodos. Internamente, está funcionando igual. – AMissico