UNIX-Programmierung Zeitfunktionen

Willemers Informatik-Ecke

Sekunden seit dem 1.1.1970

UNIX zählt die Zeit in Sekunden seit dem 1.1.1970. Diesen Wert liefert die Funktion time().

#include <time.h>

time_t time(time_t *t);

Als Parameter kann man einfach 0 geben. Da die wenigsten Menschen die Zahl der Sekunden seit dem 1.1.1970 einordnen können, gibt es hilfreiche Umrechnungsfunktionen.

#include <time.h>

struct tm *localtime(const time_t *timer);

tm enthält alle Zeitinformationen

Die Struktur tm, deren Zeiger die Funktion localtime() liefert, enthält alle gewünschten Daten, wie das Tagesdatum und Wochentag. Alle Werte beginnen bei 0 außer dem Monat. Dieser beginnt mit 1. Auf diese Besonderheit ist vermutlich jeder Programmierer mindestens einmal in seinem Leben hereingefallen. Sie noch nicht? Warten Sie es ab, Sie sind ja noch nicht tot.

struct tm {
   int tm_sec;      /* seconds after the minute - [0,61] */
   int tm_min;      /* minutes after the hour - [0,59] */
   int tm_hour;     /* hours - [0,23] */
   int tm_mday;     /* day of month - [1,31] */
   int tm_mon;      /* month of year - [0,11] */
   int tm_year;     /* years since 1900 */
   int tm_wday;     /* days since Sunday - [0,6] */
   int tm_yday;     /* days since January 1 - [0,365] */
   int tm_isdst;    /* daylight savings time flag */   
}

Um in Protokolldateien einen Zeitstempel zu hinterlassen, gibt es die recht praktische Funktion asctime(). Sie liefert aus der Struktur tm eine Zeichenkette, leider im amerikanischen Format. Die Zeichenkette ist immer 26 Byte lang und endet mit einem Zeilenvorschubzeichen und einer Abschluss Null.

#include <time.h>

char * asctime(const struct tm *t);

Die Funktion gettimeofday() ist hilfreich, wenn man eine genauere Zeit als in Sekunden braucht. Sie liefert in seiner Struktur timeval auch Mikrosekunden. Wie exakt diese Messung tatsächlich ist, hängt allerdings von der Hardware ab.

#include <sys/time.h>

int gettimeofday(struct timeval *tp, void *tzp);

struct timeval {
    unsigned long  tv_sec;   /* seconds since Jan. 1, 1970 */
    long           tv_usec;  /* and microseconds */
};
 
struct timezone {
    int  tz_minuteswest;  /* of UTC */
    int  tz_dsttime;      /* type of DST correction to apply */
};

Tickzählung per clock()

Mit der Funktion clock() werden die Ticks seit dem Start des Programms ermittelt. Um auf Sekunden zu kommen, muss der Wert durch die Konstante CLOCKS_PER_SEC geteilt werden. Diese Funktion eignet sich vor allem für Performancemessungen.

#include <time.h>

    clock_t clock(void);

Die Funktion difftime() ermittelt die Differenz zwischen zwei Zeitpunkten in Sekunden.

#include <time.h>

   double difftime(time_t time1, time_t time0);

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer