Sommer- Winterzeitumstellung

  • C#

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Sommer- Winterzeitumstellung

    Hallo

    Wie bekomme ich es hin, dass mir bei der Umstellung von Sommer- auf Winterzeit für diesen Tag 25 statt 24 Stunden berechnet werden?

    C#-Quellcode

    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3. DateTime dt1 = new DateTime(2021, 10, 31, 0, 0,0);
    4. DateTime dt2 = new DateTime(2021, 11, 01, 0, 0,0);
    5. TimeSpan ts = new TimeSpan (dt2.Ticks - dt1.Ticks); //Sonntag, 31.10.2021 (Umstellung auf Winterzeit)
    6. String std = ts.TotalHours.ToString(); //24 statt 25
    7. label1.Text = std.ToString();
    8. }


    Danke für Eure Hilfe

    Murmeli81 schrieb:

    VB.NET-Quellcode

    1. String std = ts.TotalHours.ToString(); //24 statt 25

    C#-Quellcode

    1. // Entweder so:
    2. double std = ts.TotalHours ; //24 statt 25
    3. //oder so:
    4. String std = ts.TotalHours.ToString(); //"24" statt "25"
    TimeSpan weiß nix von Sommer- und Winterzeit, da musst Du Deine Umrechnung mit nem if-Konstrukt machen.
    Aber:
    Wozu brauchst Du das?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das sollte gehen, oder überseh ich was? Zumindest hab ich nur eine TimeZoneInfo.AdjustmentRule.

    C#-Quellcode

    1. TimeSpan GetTimeSpan(DateTime dtStart, DateTime dtEnd)
    2. {
    3. TimeZoneInfo.AdjustmentRule rule = TimeZoneInfo.Local.GetAdjustmentRules()[0];
    4. DateTime cestStart = new DateTime(dtStart.Year, rule.DaylightTransitionStart.Month, rule.DaylightTransitionStart.Day, rule.DaylightTransitionStart.TimeOfDay.Hour, rule.DaylightTransitionStart.TimeOfDay.Minute, rule.DaylightTransitionStart.TimeOfDay.Second);
    5. DateTime cestEnd = new DateTime(dtEnd.Year, rule.DaylightTransitionEnd.Month, rule.DaylightTransitionEnd.Day, rule.DaylightTransitionEnd.TimeOfDay.Hour, rule.DaylightTransitionEnd.TimeOfDay.Minute, rule.DaylightTransitionEnd.TimeOfDay.Second);
    6. bool dtStartIsCest = dtStart >= cestStart && dtStart < cestEnd;
    7. bool dtEndIsCest = dtEnd >= cestStart && dtEnd < cestEnd;
    8. TimeSpan difference = new TimeSpan();
    9. if(dtStartIsCest && !dtEndIsCest)
    10. {
    11. difference = new TimeSpan(-1, 0, 0);
    12. }
    13. if(!dtStartIsCest && dtEndIsCest)
    14. {
    15. difference = new TimeSpan(1, 0, 0);
    16. }
    17. return (dtEnd - dtStart).Add(difference);
    18. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    Murmeli81 schrieb:

    DateTime dt1 = new DateTime(2021, 10, 31, 0, 0,0);
    DateTime dt2 = new DateTime(2021, 11, 01, 0, 0,0);
    TimeSpan ts = new TimeSpan (dt2.Ticks - dt1.Ticks); //Sonntag, 31.10.2021 (Umstellung auf Winterzeit)

    Nimm zur Berechnung der Differenz die UTC-Werte

    C#-Quellcode

    1. DateTime dt1 = new DateTime(2021, 10, 31, 0, 0, 0).ToUniversalTime();
    2. DateTime dt2 = new DateTime(2021, 11, 01, 0, 0, 0).ToUniversalTime();
    3. TimeSpan ts = dt2 - dt1; //25h
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    RodFromGermany schrieb:


    Aber:
    Wozu brauchst Du das?

    Ich bin Schichtarbeiter und mir fällt spontan vieles ein:
    • (Zeit)Konto-Korrekturen
    • RealTime-Adjustment
    • Übertragungssysteme (übermitteln immer auch einen Zeitstempel und dieser muss synchronisiert sein)
    • ...

    Aber die Antwort von @petaod ist optimal ^^

    PadreSperanza schrieb:

    (Zeit)Konto-Korrekturen
    Dieses Problem würde ich nicht in die normale Konten-Berechnung reinnehmen, das ist viel zu fehleranfällig.
    Mit einem If-Else-If-Block die Hin- und Rückschaltung der Sommerzeit identifizieren und in diesen If-Blöcken das tun, was zu tun ist, das wäre für die betroffenen Konten ein Plus oder Minus von einer Stunde.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Murmeli81 schrieb:

    gleichmässeig pro 1/4 Stunde zu verteilen
    Wo liegt das Problem?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!