FAQ 0115: Wie wandle ich ein Unix- oder DOS-Timestamp in ein konkretes Datum um?
von Helge Rex
Frage
Wie wandle ich ein Unix- oder DOS-Timestamp in ein konkretes Datum um?
Unix-Timestamp
Ein Unix-Timestamp enthält die Anzahl Sekunden, die seit dem 01.01.1970 00:00 Uhr Koordinierte Weltzeit vergangen sind. Demzufolge muß man den Timestamp nur zu diesem Datum addieren.
Debug.Print DateAdd("s", TimeStamp, _ DateSerial(1970, 1, 1) + TimeSerial(0, 0, 0))
Mittels FileTimeToLocalFileTime kann man diese Zeit anschließend in die lokale Zeitzone umrechnen.
DOS-Timestamp
Neu Ein DOS-Timestamp ist etwas komplexer aufgebaut als ein Unix-Timstamp. Das Hi-Word enthält das Datum, wobei die oberen sieben Bit die Anzahl Jahre seit 1980, die unteren fünf Bit die Tage und die anderen vier Bit die Monate angeben. Das Lo-Byte ist so ähnlich aufgebaut: Die oberen fünf Bit geben die Stunden, die unteren fünf Bit die Sekunden und die restlichen sechs Bit die Minuten an, wobei die Sekunden durch zwei dividiert werden.
' Umrechnen -> DOS-Zeitstempel in PC-Zeit-Format ' - &H2c2b1001 -> 11.01.2002 02:00:02 Private Declare Function DosDateTimeToVariantTime Lib "oleaut32.dll" ( _ ByVal wDosDate As Integer, _ ByVal wDosTime As Integer, _ ByRef pvTime As Date) As Long Public Function vbDosDate2Date(ByRef lngDate As Long) As String Dim strDOSTime As String Dim strDOSDate As String Dim strDate As String Dim dateDest As Date strDate = Hex$(lngDate) strDOSDate = Left$(strDate, 4) strDOSTime = Right$(strDate, 4) Call DosDateTimeToVariantTime( _ CInt("&H" & strDOSDate), _ CInt("&H" & strDOSTime), _ dateDest) vbDosDate2Date = CStr(dateDest) End Function
Es gibt auch die Funktion DosDateTimeToFileTime, welche den DOS-TimeStamp als Struktur zurückgibt. Diese Struktur kann anschließend mit FileTimeToLocalFileTime in die aktuelle Zeitzone umgerechnet werden.
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.