se si specifica un solo formato per TryParseExact
che è tutto ci proverò. Parse
prova tutti i formati fino a quando non viene trovata una corrispondenza migliore o viene trovata la prima corrispondenza. (Non sono sicuro di quale.) L'ho fatto poche settimane fa, con un CultureInfo personalizzato. Non ho provato le prestazioni, ma ho eseguito test unitari sui miei metodi di analisi (senza CultureInfo personalizzato, vedi sotto) contro 61.880 date memorizzate in un database. Non ho notato problemi di prestazioni.
Indipendentemente se si specifica CultureInfo o meno, le routine di analisi interne utilizzeranno CultureInvariant se non viene passato nessuno. Pertanto, CultureInfo non rallenta il processo. (Ci sono alcuni colpi di prestazioni per l'ebraico e altre date "esotiche" a causa di un'ulteriore analisi che richiedono.) Dalla mia recensione del codice sorgente per DateTime, il numero di formati di stringa determina la velocità con cui queste routine possono analizzare una stringa di data. Più il formato è, più lento. Se ne stai specificando solo uno, l'analisi è veloce quanto possibile con i metodi ...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
io non sono sicuro che sono funzionalmente differenti. Ho ispezionato il codice per entrambi i metodi e internamente utilizzano le stesse procedure. L'unica differenza che ho trovato è che ParseExact utilizza i formati specificati al posto di tutti i formati per un oggetto CultureInfo. – AMissico
@AMissico sì, questo è esattamente il motivo per cui sono funzionalmente diversi. – Sander
@Sandro: hmm, capisco il tuo punto. Per me, capisco funzionalmente come un cambiamento nel modo in cui qualcosa funziona. In questo caso, l'unica differenza sono gli argomenti passati ai metodi. Internamente funziona allo stesso modo. – AMissico