was zum denken



  • Hallo,
    ich schreibe gerade an einem Programm zur Parametrierung von Messgeräten.
    Über die serielle Schnittstelle lese ich ein Datum aus dem Gerät in mein Programm ein.
    Das Datum ist dabei mit 2 Bytes kodiert, die Bytes sind hexadezimal.
    Es werden fortlaufend vom Datum 01.01.1900 die Tage gezählt.
    01.01.1900 entspricht 00 02
    02.01.1900 entspricht 00 03 usw.
    Beispiel:
    ich empfange 97 8C, dies entspricht 20.03.2006

    nun rechne ich 9*(16^3) + 7*(16^2) + 8*16 + 12 = 38796

    38796 / 365 = 106 + einen Rest -> 1900 + 106 = 2006
    als rest bleibt 106

    106/30 = 3 + einen Rest von 16 -> Monat: 3

    Rest 16 -> Tag 16

    mir fehlen also 4 Tage zum richtigen datum
    Hat jemand eine Idee was daran falsch ist? und wie man es richtig macht??



  • Erstens hast du bei deiner Rechnung die Schaltjahre unterschlagen. Und zweitens sind die einzelnen Monate auch unterschiedlich lang.

    (und drittens: Im Endeffekt muß das "Aufdröseln" des Datums zu dem Varfahren passen, mit dem du das ursprüngliche Datum codiert hast)



  • haste ne idee wie ich das realisieren könnte das Schaktjahre und die Länge des Monats einbezogen werden.
    Ich selbst habe das Datum nicht codiert, ich lese es nur aus.
    Aus der Firmware wird man auch nicht schlau und die alte VB-Version dieser Software ist sehr undurchsichtig, und nicht dokumentiert.



  • boost bietet glaub ich sowas mit datum an, jednefalls kann es die differenz in tagen zwischen zwei daten berechnen. Dann kann es sicher auch aus einer diferenz und einem startdatum das enddatum berechnen. Also benutz bost oder schau dir den code dazu an 🙂 ok, durch den code zu sehen wird whl ziemlich kompliziert werden.



  • Hallo,
    hier findest Du eine Beschreibung zum Gregorianischer Kalender

    Außerdem hast Du nicht berücksichtigt, dass Du erst ab zwei zählst (... wenn Deine Beschreibung korrekt war...)

    maRKus23 schrieb:

    ...
    Es werden fortlaufend vom Datum 01.01.1900 die Tage gezählt.
    01.01.1900 entspricht 00 02
    02.01.1900 entspricht 00 03 usw.
    ...



  • was ist denn boost??



  • maRKus23 schrieb:

    was ist denn boost??

    www.boost.org- eine Sammlung von allgemein einsaetzbaren Bibliotheken für fast jeden Anwendungszweck.


Anmelden zum Antworten