Sie können die integrierte Funktion Format
verwenden, um dies für Sie zu tun.
Hier ist ein einfacher Test, dies zu bestätigen:
Public Sub TestDateParsing()
'On my computer, the date format is U.S. (mm/dd/yyyy)'
'This test creates a date string in dd/mm/yyyy format to'
'simulate user input in a different format'
Const TEST_DATE As Date = #6/1/2009#
Dim inputDate As String
inputDate = Format(TEST_DATE, "dd/mm/yyyy")
'inputDate is "1/6/2009" (June 1 in dd/mm/yyyy format)'
Debug.Print Format(inputDate, "dd/mm/yyyy")
'It`s magic! The above line will print 6/1/2009'
'which is the correct format for my Regional Settings'
End Sub
Es mag wie Magie erscheinen, aber es ist nicht. Es nutzt die Funktion Format
in Verbindung mit den aktuellen regionalen Einstellungen.
Beispiel: Angenommen, Ihre Ländereinstellungen das "mm/dd/yyyy"
Format für Daten konfiguriert sind.
Jetzt erhalten Sie ein Datum Zeichenfolge von einem Benutzer in "dd/mm/yyyy"
Format. Wenn Sie Format
diese Zeichenfolge Datum und Format
sagen auch "dd/mm/yyy"
zu verwenden, wird es den Monat und den Tag Teile des Datums wechseln, weil Sie Ihre Einstellungen sagen Daten in "mm/dd/yyyy"
Format.
Mit anderen Worten nehmen Format
immer die Datumszeichenfolge vom Benutzer formatiert nach Ihren aktuellen Regional-Einstellungen (in diesem Fall "mm/dd/yyyy"
), so, wenn Sie ihm sagen, das Datum "dd/mm/yyyy"
mit zu formatieren, wird es zwingen, tausche die Teile von Monat und Tag. Wenn Ihre Ländereinstellungen dasselbe Format wie das vom Benutzer angegebene Datum verwenden, funktioniert dieser Code weiterhin: Format
gibt das Benutzerdatum einfach unverändert zurück. Verwirrt noch? ;)
Das Gleiche passiert, wenn Ihre Ländereinstellungen auf "dd/mm/yyyy"
eingestellt sind und der Benutzer ein Datum im Format "mm/dd/yyyy"
sendet.
Der Haken ist, dass Sie vor der Zeit zu wissen, welches Format der Benutzer Daten in senden.Sie können nicht mit dem Mischen und dem Anpassen von Datumsformaten beginnen (und sie sollten es auch nicht sein).
EDIT (von MarkJ) - nur um zu beweisen, dass Mikes Code einen String in Datum umwandeln kann. Mike, bitte rolle zurück oder ändere diese Änderung, wenn du willst.
Public Sub Test()
Dim dte As Date
For dte = #1/1/2009# To #12/31/2009#
Call TestDateParsing(dte)
Next dte
End Sub
Public Sub TestDateParsing(ByVal dteIn As Date)
'On my computer, the date format is U.S. (mm/dd/yyyy)'
'This test creates a date string in dd/mm/yyyy format to'
'simulate user input in a different format'
Dim sExpected As String
sExpected = Day(dteIn) & "/" & Month(dteIn) & "/" & Year(dteIn)
Dim inputDate As String
Dim dte As Date
inputDate = Format(dteIn, "dd/mm/yyyy")
dte = Format(inputDate, "dd/mm/yyyy")
Debug.Assert sExpected = Day(dte) & "/" & Month(dte) & "/" & Year(dte)
Debug.Print sExpected
End Sub
Ich bin sicher, dass, wenn ich diese Frage schrieb, der dritte Satz ein Ende hatte. – crb