Forum: Mikrocontroller und Digitale Elektronik Zwei Zeitstempel vergleichen


von Thomas (Gast)


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ß

von Philipp B. (philipp_burch)


Lesenswert?

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

von Thomas (Gast)


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ß

von Honkey H. (honkeys)


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.

von Rolf I. (for_ro)


Lesenswert?

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

Gruß

Rolf

von Thomas (Gast)


Lesenswert?

@ Rolf

Dankeschön für den TIP!!

Das funktioniert super!!!


Gruß

von Karoly Kovacs (Gast)


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;
}

von Karoly Kovacs (Gast)


Lesenswert?

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

Karoly

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.