Die Community zu .NET und Classic VB.
Menü

FAQ 0115: Wie wandle ich ein Unix- oder DOS-Timestamp in ein konkretes Datum um?

 von 

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))

Listing 1: Unix-Timestamp berechnen

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

Listing 2: DOS-TimeStamp berechnen

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.