Willkommen in unserer Community

Werde Teil unserer Community und registriere dich jetzt kostenlos ...

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Differenz zwischen Datum A und Datum B

Dieses Thema im Forum "Software" wurde erstellt von Dirk, 9. November 2017.

Schlagworte:
  1. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Hallo zusammen,

    nun habe ich einmal eine Frage ...

    In einer Anwendung berechne ich die Differenz zwischen einem Datum A (aktuelle Zeit) und einem Datum B (Ereignis in der Zukunft). Ich nutze keine fertige Bilbliothek, sondern eigenen Code. Nun möchte ich gerne meine Lösung unabhängig überprüfen.

    Datum A und B sind folgendermaßen angegeben:
    Jahr, Monat, Tag im Monat, Stunde, Minute, Sekunde

    Die Differenz:
    Tage, Stunden, Minuten, Sekunden

    Vielleicht hat jemand Lust und Zeit, mir hierbei zu helfen.

    Ich gebe hier extra keine weiteren Infos zur Berechnung, damit nicht mögliche Fehler von mir in die Berechnung einfließen.

    Also vielleicht hat jemand ja Lust, an einem Beispiel (möglichst über mehrere Jahrzehnte, nicht über 2099), die Zeitdifferenz zu berechnen, ich würde mich jedenfalls sehr freuen ... und hoffe, dass mein Ergebnis stimmt :) Aber nicht, dass sich jemand heute Abend "abquält", also es ist nicht so eilig!

    Meine Lösung funktioniert für Zeiten ab 2016.

    Dirk :ciao:
     
  2. Janiiix3

    Janiiix3 Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    987
    Zustimmungen:
    6
    Ort:
    Hannover
    Sprachen:
    C
    Map
    Nabend. Ist das jetzt eine Scherzfrage? Das du mal was fragst. Wird das Datum so wie die Zeit nicht ab einem bestimmten Datum durch Sekunden hoch gezählt?
    Da war doch was. Kann man da nicht drauf aufbauen?
     
  3. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Ja, so habe ich es gelöst. Ich brauche nur mal eine Kontrollberechnung ... eine die nicht ich mache ;)
     
  4. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    79
    Zustimmungen:
    3
    Ort:
    Hamminkeln
    Sprachen:
    BascomAVR, C, Assembler
    Hmmm...etwas ot perl und die Module calc und timediff
    Addi
     
  5. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Ja, so könnte ich auch noch mal testen.
     
  6. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    79
    Zustimmungen:
    3
    Ort:
    Hamminkeln
    Sprachen:
    BascomAVR, C, Assembler
    Hatte ich frueher in der industrie eingesetzt..auswertungen fuer einen mobilfunkbetreiber in dk
     
  7. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.612
    Zustimmungen:
    45
    Ort:
    127.0.0.1 ;)
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
    Wenn es .Net ist (C#, VB), einfach die 2 DateTime subtrahieren. Dann bekommst du ein TimeSpan zurück.
    upload_2017-11-10_7-46-43.png
     
  8. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.612
    Zustimmungen:
    45
    Ort:
    127.0.0.1 ;)
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#


    CodeBox BascomAVR
            Dim Date1 As DateTime
            Dim Date2 As DateTime = DateTime.UtcNow
            IO.File.AppendAllText("D:\Test.csv", "Aktuell:;" & Date2.ToString & vbCrLf)
            IO.File.AppendAllText("D:\Test.csv", _
              "Jahr;" & _
              "Tage;" & _
              "Stunden;" & _
              "Minuten;" & _
              "Sekunden" & _
              vbCrLf _
            )
            For i As Integer = 2000 To 2099
                Date1 = New DateTime(i, 1, 1)
                Dim Diff As TimeSpan = Date2 - Date1
                IO.File.AppendAllText("D:\Test.csv", _
                  i.ToString & ";" & _
                  Diff.Days.ToString & ";" & _
                  Diff.Hours.ToString & ";" & _
                  Diff.Minutes.ToString & ";" & _
                  Diff.Seconds.ToString & _
                  vbCrLf _
                )
            Next
            Stop
    
    

    Habs für dich mal durchlaufen lassen und als csv angehängt ;)
     

    Anhänge:

    • Test.zip
      Dateigröße:
      746 Bytes
      Aufrufe:
      1
    Dirk gefällt das.
  9. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Hallo Tommy,

    vielen Dank. Ich wollte es mir am Wochenende selber programmieren, aber dies hilft jetzt schon mal weiter.

    Ab 2018 gibt es negative Stunden, Minuten und Sekunden. Da müsste ein Tag Differenz abgezogen werden, also 24 Stunden weniger und diese müssten dann zu Stunden, Minuten, Sekunden addiert werden, damit dies alles positiv wird. Ab 2018 ist dann auch denke 1 Sekunde Fehler drin, es kann sein weil im Moment alles negativ ist. Da muss ich mir noch mal mehr Zeit für nehmen.

    2018;-51;-16;-40;-47

    2018;50;07;19;12 sollten stimmen, wenn man 1 Tag in die Stunden:Minuten:Sekunden einfließen läßt.

    Interessant wären auch nicht nur ein anderes Jahr, sondern auch anderer Monat, Stunde, Minute und Sekunde der aktuellen Zeit zur Ereigniszeit.
     
  10. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Wie ist das mit den Schaltsekunden? Die kannst Du ja nicht vorhersagen.
     
  11. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.612
    Zustimmungen:
    45
    Ort:
    127.0.0.1 ;)
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
    Man kann ja auch addieren. Oder die Rechnung umdrehen, kommt auf's Selbe hinaus.
    An die Schaltsekunde (kenn ich tatsächlich nur wegen meinen Spielereien mit DCF77) hatte ich grad auch gedacht. Schaltjahre ist ja einfach. Einfach die letzten 2 bits auf 0bxxxxxx00 prüfen. Falls ja -> Schaltjahr. Selbstverständlich bietet unser kryptisches Datum/Uhrzeit Format da auch noch gewissen Spielraum.
     
  12. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    So genau braucht es nicht sein, die grundsätzliche Berechnung sollte aber stimmen. 2017 ist eine Sekunde länger?!, das wird die eine Sekunde Differenz ab 2018 sein. Für die Ist-Zeit läuft eine RTC, da gibt es pro Jahr sowieso Abweichungen. Noch muss man auch wegen Sommerzeit neu einstellen.
     
  13. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.698
    Zustimmungen:
    38
    Ort:
    Hennigsdorf
    Sprachen:
    BascomAVR, Assembler
    Map
    Alle Hundert Jahre ist aber kein Schaltjahr. Alle vierhundert Jahre dann doch wieder (deswegen war 2000 ein Schaltjahr)
     
  14. TommyB

    TommyB Premium Benutzer

    Registriert seit:
    17. Mai 2010
    Beiträge:
    1.612
    Zustimmungen:
    45
    Ort:
    127.0.0.1 ;)
    Sprachen:
    Assembler, LunaAVR, VB.Net, Python, C#
    Korrekt. Aber, auch wenn ich Dirks "Bastelkünste" hoch schätze, ich gehe nicht davon aus dass sie die nächsten knapp 100 Jahre überlebt, oder noch genutzt wird ;)
     
  15. Pirx

    Pirx Mitglied

    Registriert seit:
    15. August 2009
    Beiträge:
    245
    Zustimmungen:
    3
    Ort:
    Möckern
    Sprachen:
    Assembler
    Map
    Hi Dirk,

    Zeitdifferenz berechnen .. wie wärs mit Excel ?
    Berechnung :
    Zeitdifferenz Werte.jpg
    Formeln :
    Zeitdifferenz Formelansicht.jpg
    Spalte A ist auf Datum formatiert und Spalte B auf Uhrzeit.

    Das Ergebnis steht hier noch in Tagen. Bei Runterbrechen auf Jahre und Tage müssen die Schaltjahre mit berücksichtigt werden.

    Gruß
    Pirx
     
  16. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Hallo Pirx,

    ja an Excel habe ich auch schon gedacht.

    Wenn ich aber hier auch wieder von Sekunden auf Tage usw. rechnen und dann auch noch Schaltjahre berücksichtigen muss, könnte ich auch gleich meine fertige Mikrocontrollerversion nehmen, die macht das ja eigentlich schon perfekt. Ich bräuchte halt eine Lösung mit der ich möglichst unabhängig von mir meine aktuelle Lösung auf dem Mikrocontroller überprüfen kann. Ich hatte ursprünglich daran gedacht, dass mir einfach jemand einige Beispiele bringt, das wäre auf jedenfall dann unabhängig :-D Ich kann mir aber auch auf Basis Tommys Lösung ein kleines PC Programm schreiben, die mir ein paar Daten mit Zeitdifferenz berechnet, das ganze ist auch nicht sooo kompliziert.

    Dirk :ciao:
     
  17. Straddel

    Straddel Neues Mitglied

    Registriert seit:
    25. März 2010
    Beiträge:
    10
    Zustimmungen:
    2
    Sprachen:
    BascomAVR
    Map
    https://www.timeanddate.de/datum/zeitspanne-sekunde
     
    Dirk und TommyB gefällt das.
  18. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
  19. Dirk

    Dirk Administrator Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.070
    Zustimmungen:
    100
    Ort:
    Mittelhessen, Giessen
    Sprachen:
    C, Assembler, Pascal, C++, PHP, Java
    Map
    Ich habe nun einige Beispiele mit https://www.timeanddate.de/datum/zeitspanne-sekunde erstellt und mit meiner Lösung (Mikrocontroller-Projekt) verglichen, beides stimmt immer überein.

    Zum Beispiel:
    Code:
    Von: 14. März 2017, 04:44:26
    Bis: 16. Mai 2020, 06:45:34
    Ergebnis: 1159 Tage, 2 Stunden, 1 Minute und 8 Sekunden
    
    Von: 25. Januar 2017, 09:33:03
    Bis: 16. Mai 2025, 18:41:44
    Ergebnis: 3033 Tage, 9 Stunden, 8 Minuten und 41 Sekunden
    
    Von: 25. Januar 2017, 09:33:03
    Bis: 16. Juli 2080, 02:41:44
    Ergebnis: 23 182 Tage, 17 Stunden, 8 Minuten und 41 Sekunden
    Dirk :ciao:
     
  20. dino03

    dino03 Moderator

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.663
    Zustimmungen:
    11
    Sprachen:
    BascomAVR, Assembler
    Map
    Hi,

    in irgend einem alten Heft für den ZX-Spectrum habe ich Basic-Quellcode für komplette Datums/Zeit-Routinen.
    Müßte ich nur suchen und hoffentlich finden ;)
    Da gibts dann sogar noch Zeilennummern im Programm :D

    Gruß
    Dino
     

Diese Seite empfehlen

  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)