mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zwei Zeitstempel vergleichen


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche eine elegante ;-) Lösung, zwei Zeitstempel mit einander zu 
vergleichen. (Programmiersprache Bascom Basic) Im Moment habe ich das 
durch geschachtelte Verzweigungen gelöst.
Ich fange mit dem Jahr an, dann Monat...Tag...usw.
Der Hintergrund ist, zu überprüfen ob ein Zeitstempel grösser, oder 
kleiner als der andere ist.
D.h ich habe einen Zeitstempel. 10:15 03.03.07(stunde:minute 
tag.monat.jahr)

der zweite Stempel sieht z.B folgendermaßen aus: 11:20 03.03.07

In diesem Fall, sollte ich als Ergebnis erhalten, dass der 2.Stempel 
größer ist.....

Hat jemand ne gute Idee?


Gruß

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sind diese Stempel denn gespeichert? Oft werden die ja als Anzahl 
Sekunden seit einem Stichtag gespeichert, das vereinfacht Vergleiche 
ungemein.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du meinst sicherlich die Unixtime!?

Nein leider erhalte ich sie nicht in diesem Format.
Sie stehen mir im "Klartext" zur Verfügung, also so wie ich es im ersten 
Posting geschrieben habe.

Gruß

Autor: Honkey Honk (honkeys)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe so ein ähnliches Problem, ich bin momentan damit beschäftig 
eine Zutrittsloger zu realiesieren, in dem Projekt ist eine RTC. Wie 
würdet ihr das Datum am besten speichern? Das alles wird ein TWI EEprom 
geschrieben.

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal die Bascom Funktionen SYSDAY und SYSSEC an, mit denen 
kannst du genau das machen.

Gruß

Rolf

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rolf

Dankeschön für den TIP!!

Das funktioniert super!!!


Gruß

Autor: Karoly Kovacs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast nicht geschrieben, ob Du Basic oder C verwendest?

Für C gibt es "seit langem" eine sehr Elegante Lösung in time.h.
(Etwas ähnliches - ich habe es für meine Zwecke ein bisschen verkürzt.)

Karoly
-----------------------------------------------------------------------
struct tm
{
  int tm_year;                            /* Year since 1900          */
  unsigned char tm_mon;                   /* Month.       [0-11]      */
  unsigned char tm_mday;                  /* Day.         [1-31]      */
  unsigned char tm_hour;                  /* Hours.       [0-23]      */
  unsigned char tm_min;                   /* Minutes.     [0-59]      */
  unsigned char tm_sec;                   /* Seconds.     [0-60]      */
};

typedef unsigned long time_t;

#define between(a, c, z)        \
  ((unsigned)((c) - (a)) <= (unsigned)((z) - (a)))

#define LEAP_YEAR(year) ((year%4)==0)

char monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31};

// convert broken time to calendar time (seconds since 1970)
time_t mktime(struct tm *timeptr) {
    int year=timeptr->tm_year+1900, month=timeptr->tm_mon, i;
    long seconds;

    // seconds from 1970 till 1 jan 00:00:00 this year
    seconds= (year-1970)*60L*60*24*365;

    // add extra days for leap years
    for (i=1970; i<year; i++) {
        if (LEAP_YEAR(i)) {
            seconds+= 60L*60*24;
        }
    }

    // add days for this year
    for (i=0; i<month; i++) {
      if (i==1 && LEAP_YEAR(year)) {
        seconds+= 60L*60*24*29;
      } else {
        seconds+= 60L*60*24*monthDays[i];
      }
    }

    seconds+= (timeptr->tm_mday-1)*60L*60*24L;
    seconds+= timeptr->tm_hour*60L*60;
    seconds+= timeptr->tm_min*60L;
    seconds+= timeptr->tm_sec;
    return seconds;
}

Autor: Karoly Kovacs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, wenn es nicht eindeutig war, das habe ich für "Honkey Honk" 
geschrieben.

Karoly

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.