Forums Neueste Beiträge
 

Timestamp in VB-Datum wandeln

17/01/2008 - 03:32 von Wolf Linde | Report spam
Hallo,

ich habe ein Problem den folgenden TimeStamp in ein Datum zu wandeln.

Gegeben ist z.B. der TimeStamp
TimeHigh)907028 TimeLow7261424

Der Startdatum ist der 1.1.1601 (LabView-System)
Die Auflösung betràgt 100 Nanosekunden

eigentlich müßte ein Wert im Heutigen Bereich das Ergebnis sein
Aber alle versuche mit DateAdd() bringen unsinnige Werte.
(oder Überlauf)

Wer weiß Rat?

Danke
wolf
 

Lesen sie die antworten

#1 Christian Zimmermann
17/01/2008 - 09:22 | Warnen spam
Hallo Wolf,

Wolf Linde schrieb:

ich habe ein Problem den folgenden TimeStamp in ein Datum zu wandeln.

Gegeben ist z.B. der TimeStamp
TimeHigh)907028 TimeLow7261424

Der Startdatum ist der 1.1.1601 (LabView-System)
Die Auflösung betràgt 100 Nanosekunden

eigentlich müßte ein Wert im Heutigen Bereich das Ergebnis sein
Aber alle versuche mit DateAdd() bringen unsinnige Werte.
(oder Überlauf)



Das mußt du selbst zusammenfummeln, da VB mit diesen Werten direkt
nichts anfangen kann. Ich unterstelle mal, dass die Werte von außerhalb
kommen (nicht VB-Typen sind) und TimeHigh und TimeLow jeweils
vorzeichenlose 32-bit Werte sind. Vorzeichenlose Ganzahltypen kennt VB
Classic nicht, deshalb hier als Double.


' Anfang Code
Dim timelow As Double, timehigh As Double
Dim xSek As Double, hrs As Long, secs As Long
Dim d As Date

timehigh = 29907028
timelow = 197261424

If (timehigh * (2 ^ 32) + timelow) / 10000000 - Int((timehigh * (2 ^
32) + timelow) / 10000000) > 0 Then
' angefangene Sekunde vorhanden
xSek = Int((timehigh * (2 ^ 32) + timelow) / 10000000) + 1
Else
xSek = Int((timehigh * (2 ^ 32) + timelow) / 10000000)
End If
hrs = Int(xSek / 3600)
secs = Int(xSek - CDbl(hrs) * 3600)
d = DateAdd("h", hrs, #1/1/1601#)
d = DateAdd("s", secs, d)
Debug.Print d


' Ende Code

Der Datumstyp in VB ist nur sekundengenau, deshalb wurde der
ursprüngliche Wert (Auflösung 100 Nanosekunden) durch 10.000.000
geteilt. Allerdings ist die Anzahl der Sekunden für eine direkte
Addition zu groß. Deshalb die Umrechnung in Stunden und der Rest wird
als Sekunden addiert.

Da kommt dann gemàß deinen Beispielwerten der 16.01.2008 15:25:38
heraus. Das sollte es sein.

Gruß

Christian

Ähnliche fragen