Ich habe ein Excel-Tool, das die aktuelle Uhrzeit und das Datum in UTC-Zeit umwandelt und dann diese Uhrzeit und das Datum in einer Datenbank speichert (die auch eine Excel-Datei ist). Das Problem ist, dass wenn jemand in Mexiko zum Beispiel versucht, dieses Werkzeug zu benutzen, das Format des Datums anders ist (DD-MM-YY statt MM-DD-YY), und es in der Datenbank falsch gespeichert wird . Hier ist der Code, der die aktuelle Uhrzeit und das Datum zu UTC konvertiert:Probleme mit Datumsformaten VBA-Excel
Option Explicit
Public Declare Function SystemTimeToFileTime Lib _
"kernel32" (lpSystemTime As SYSTEMTIME, _
lpFileTime As FILETIME) As Long
Public Declare Function LocalFileTimeToFileTime Lib _
"kernel32" (lpLocalFileTime As FILETIME, _
lpFileTime As FILETIME) As Long
Public Declare Function FileTimeToSystemTime Lib _
"kernel32" (lpFileTime As FILETIME, lpSystemTime _
As SYSTEMTIME) As Long
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Public Function LocalTimeToUTC(dteTime As Date) As Date
Dim dteLocalFileTime As FILETIME
Dim dteFileTime As FILETIME
Dim dteLocalSystemTime As SYSTEMTIME
Dim dteSystemTime As SYSTEMTIME
dteLocalSystemTime.wYear = CInt(Year(dteTime))
dteLocalSystemTime.wMonth = CInt(Month(dteTime))
dteLocalSystemTime.wDay = CInt(Day(dteTime))
dteLocalSystemTime.wHour = CInt(Hour(dteTime))
dteLocalSystemTime.wMinute = CInt(Minute(dteTime))
dteLocalSystemTime.wSecond = CInt(Second(dteTime))
Call SystemTimeToFileTime(dteLocalSystemTime, _
dteLocalFileTime)
Call LocalFileTimeToFileTime(dteLocalFileTime, _
dteFileTime)
Call FileTimeToSystemTime(dteFileTime, dteSystemTime)
LocalTimeToUTC = CDate(dteSystemTime.wMonth & "/" & _
dteSystemTime.wDay & "/" & _
dteSystemTime.wYear & " " & _
dteSystemTime.wHour & ":" & _
dteSystemTime.wMinute & ":" & _
dteSystemTime.wSecond)
End Function
Und dann hier ist die Formel, die das Datum und die Zeit schreibt: localtimetoutc(NOW())
Dann habe ich nur den Wert dieser Zelle in eine sparen Variable in VBA (eine Variante Variable) und dann füge ich den Wert dieser Variablen in die Datenbank. Es funktioniert perfekt für Benutzer in den USA, aber manchmal schlägt es für nicht-amerikanische Benutzer fehl. Wie kann ich sicherstellen, dass es nicht versagt? Das heißt, wie kann ich VBA zwingen, das Format zu verwenden, das ich brauche?
Grüße,
Nicht eine Gesamtlösung, aber man konnte die Werte für "MM" überprüfen, und wenn er über 12 ist, dann wissen Sie, sie MM/DD/YYYY tat , da es keinen Monat 13, 14 usw. gibt. Leider wird das nicht alles fangen ... Vielleicht kannst du die Umgebungsvariablen überprüfen und sehen. [Diese Seite] (http://www.utteraccess.com/forum/index.php?showtopic=1039007) kann helfen. – BruceWayne
Anstatt "CDate" zu verwenden, verwenden Sie 'DateSerial (Jahr, Monat, Tag) + TimeSerial (Stunde, Minute, Sekunde)'. Auf diese Weise wird das Ergebnis von Datum und Uhrzeit unabhängig von der Region nicht falsch interpretiert. Dann können Sie die Zelle (n) formatieren, wie Sie möchten. – tigeravatar
@tigeravatar Dann sollte ich "LocalTimeToUTC = CDate (... wSecond)" für diese Codezeile ersetzen? –