Hallo Zusammen,
ich habe ein Paar Probleme mit den Datumsfunktionen und der Zeitumstellung.
Ich habe Zeitreihen die UTC-kodiert sind. Bei der Berechnung von datums differenzen bzw. beim "addieren" von Stunden scheinen die Funktionen datediff/dateadd (manchmal) die Zeitumstellung zu ignorieren.
Weise ich bspw. über Cdate einer Datumsvariable einen UTC-String zu, so wird die Zeit korrekt dargestellt. die Stundendifferenz hingegen wird über datediff falsch ausgegeben, berechne ich sie über (date).toBinary stimmt sie hingegen.
Ein ähnliches Problem gibt es bei der dateadd-funktion. Weise ich hier dem Datum einen UTC-String zu, so liefer dateadd falsche werte. weise ich hingegen einen "deutschen" string zu, läuft dateadd richtig, der Zeitstempel ist jedoch um eine Stunde versetzt.
Hat nun jemand einen Tipp für mich, wie sich Probleme mit den Zeitstempeln grundsätzlich vermeiden lassen, bzw. eine Erklärung für die für mich komische Art zu "rechnen"?
Vielen Dank.
RatS
Nachfolgender Code illustiert, quick and dirty, die problematik.
ich habe ein Paar Probleme mit den Datumsfunktionen und der Zeitumstellung.
Ich habe Zeitreihen die UTC-kodiert sind. Bei der Berechnung von datums differenzen bzw. beim "addieren" von Stunden scheinen die Funktionen datediff/dateadd (manchmal) die Zeitumstellung zu ignorieren.
Weise ich bspw. über Cdate einer Datumsvariable einen UTC-String zu, so wird die Zeit korrekt dargestellt. die Stundendifferenz hingegen wird über datediff falsch ausgegeben, berechne ich sie über (date).toBinary stimmt sie hingegen.
Ein ähnliches Problem gibt es bei der dateadd-funktion. Weise ich hier dem Datum einen UTC-String zu, so liefer dateadd falsche werte. weise ich hingegen einen "deutschen" string zu, läuft dateadd richtig, der Zeitstempel ist jedoch um eine Stunde versetzt.
Hat nun jemand einen Tipp für mich, wie sich Probleme mit den Zeitstempeln grundsätzlich vermeiden lassen, bzw. eine Erklärung für die für mich komische Art zu "rechnen"?
Vielen Dank.
RatS
Nachfolgender Code illustiert, quick and dirty, die problematik.
Quellcode
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim dattemp As Date, datstart As Date, datAddTmpUTC As Date, datAddtmp As Date
- Dim strtemp() As String = {"2012-03-25T00:00:00+01:00", "2012-03-25T01:00:00+01:00", "2012-03-25T03:00:00+02:00", "2012-03-25T04:00:00+02:00", "2012-03-25T05:00:00+02:00", "2012-03-25T06:00:00+02:00", "2012-03-25T07:00:00+02:00", "2012-03-25T08:00:00+02:00", "2012-03-25T09:00:00+02:00", "2012-03-25T10:00:00+02:00", "2012-03-25T11:00:00+02:00"}
- Dim i As Integer, l As Long, k As Long
- datstart = CDate(strtemp(0))
- k = datstart.ToBinary
- datAddTmpUTC = CDate("2012-03-25T00:00+01:00")
- datAddtmp = CDate("25.03.2012 00:00")
- Me.Label1.Text = "UTC as String - Date of Str .tolocalTime - dateadd hour .tolocaltime - dateaddUTC hour .tolocaltime - diffBinary - Datediff" & vbCrLf
- For i = 0 To UBound(strtemp)
- dattemp = CDate(strtemp(i))
- l = dattemp.ToBinary
- Me.Label1.Text &= strtemp(i) & "___" & dattemp.ToLocalTime & "___" & datAddtmp.ToLocalTime & "___" & datAddTmpUTC.ToLocalTime & "___" & (l - k) / 36000000000 & "___" & DateDiff(DateInterval.Hour, datstart, dattemp) & vbCrLf
- datAddtmp = DateAdd(DateInterval.Hour, 1, datAddtmp)
- datAddTmpUTC = DateAdd(DateInterval.Hour, 1, datAddTmpUTC)
- Next
- End Sub
- End Class