Zeitdifferenzen mit unterschiedlichen Zeitzonen



  • Hallo,

    ich habe eine Frage zur Berechnung von Zeitdifferenzen.

    DateTime t1, t2;
                TimeSpan ts;
    
                t1 = Convert.ToDateTime("11.4.2016 12:00:00 GMT"); 
                t2 = Convert.ToDateTime("12.4.2016 12:00:00");
                ts = new TimeSpan(t2.Ticks - t1.Ticks);
                richTextBox1.AppendText(ts.ToString() + "\n");
    
                t1 = Convert.ToDateTime("1.1.2000 12:00:00 GMT");
                t2 = Convert.ToDateTime("12.4.2016 12:00:00");
                ts = new TimeSpan(t2.Ticks - t1.Ticks);
                richTextBox1.AppendText(ts.ToString() + "\n");
    

    Das Ergebnis dieses Beispiels:

    22:00:00
    5945.23:00:00
    

    Die erste Differenz ist logisch, weil wir zwischen GMT und MESZ zwei Stunden Differenz haben.
    Aber warum erscheint in der zweiten Zeile nur eine Stunde Differenz?

    Gruß
    Michael



  • Sommerzeit



  • Th69 schrieb:

    Sommerzeit

    Das verstehe ich nicht. Der Zeitpunkt t2 ist in beiden Fällen identisch und zweifellos MESZ, also Sommerzeit.
    Der erste Zeitpunkt ist in beiden Fällen als GMT definiert. Falls bei "GMT" abhängig vom Datum die Sommerzeit berücksichtigt wird, dann müsste doch die Differenz im ersten Beispiel 1 Stunde und im zweiten Beispiel 2 Stunden sein.

    Gruß
    Michael



  • Was ich eigentlich brauche ist die exakte Zeitdifferenz zwischen jetzt und 1.1.2000 12:00 UTC. Diese Zeitdifferenz darf sich bei der Sommerzeit-Umstellung selbstverständlich nicht schlagartig um eine Stunde verändern.
    Wie würdet ihr das machen?

    Gruß
    Michael



  • Ich würde DateTime.UtcNow - DateTime(2000, 1, 1, 12, 0, 0, DateTimeKind.UTC) empfehlen.



  • hustbaer schrieb:

    Ich würde DateTime.UtcNow - DateTime(2000, 1, 1, 12, 0, 0, DateTimeKind.UTC) empfehlen.

    Danke, das liefert zumindest für heute das richtige Ergebnis.
    (Eine kleine Korrektur war notwendig: Utc statt UTC)
    Ende Oktober wird sich zeigen ob es dann immer noch geht 🙂

    TimeSpan ts = DateTime.UtcNow - new DateTime(2000, 1, 1, 12, 0, 0, DateTimeKind.Utc);
    

    Gruß
    Michael



  • Ich weiß nicht ob ich jetzt irgendwo einen Denkfehler habe, aber ist es nicht korrekt das einmal eine Stunde differenz auftaucht? Schließlich liegt der Startzeitpunkt der 2. Berechnung in der Winderzeit und der Endzeitpunkt in der Sommerzeit.



  • Hi,

    je nachdem was du vor hast und ob du jetzt eine Designentscheidung für ein größeres Projekt treffen willst, empfehle ich dir dringend die beiden Artikel zu lesen:
    https://msdn.microsoft.com/en-us/library/bb384267%28v=vs.110%29.aspx
    http://stackoverflow.com/questions/4331189/datetime-vs-datetimeoffset

    Viele Grüße
    KaPtainCugel


Anmelden zum Antworten