SYNOPSIS
        #include <time.h>

        int mktime(int *ts)

BESCHREIBUNG
        Ist das Argument <ts> ein Array mit 9 Elementen (int) entsprechend
        des Rueckgabewertes von localtime(), so liefert die Funktion
        die Anzahl Sekunden seit dem 01. Januar 1970, 00:00:00 zurueck.
        Hierbei wird immer die aktuelle Zeitzone des Hostrechners zugrunde
        gelegt.
        Dies ist von Nutzen, wenn man ein Datum/Uhrzeit hat, diese aber als
        Ganzzahl-Wert speichern will oder eine Zeitdifferenz zwischen zwei
        Daten ausrechnen will.

        Das Array muss dabei so aufgebaut sein:
            int TM_SEC    (0):  Sekunde in der Minute (0..59)
            int TM_MIN    (1):  Minute in der Stunde (0..59)
            int TM_HOUR   (2):  Stunde des Tages (0..23)
            int TM_MDAY   (3):  Tag im Monat (1..31)
            int TM_MON    (4):  Monat des Jahres (0..11)
            int TM_YEAR   (5):  Jahr (z.B. 2001)
            int TM_WDAY   (6):  Wochentag (0..6, Sonntag = 0)
            int TM_YDAY   (7):  Tag im Jahr (0..365)
            inz TM_ISDST  (8):  Sommerzeit, Daylight Saving Time (1,0,-1)

        TM_YDAY und TM_WDAY werden ignoriert und koennen beliebige Zahlen
        enthalten.
        TM_ISDST kann 1 (Sommerzeit), 0 (keine Sommerzeit) oder -1 sein. Bei
        -1 wird versucht, zu erraten, ob Sommerzeit fuer die angegebene Zeit
        aktiv sein sollte.

BEISPIELE
        Man hat ein Datum/Uhrzeit (z.B. Benutzereingabe), welches als
        Unix-Zeitstempel gespeichert werden soll:
        // "Mit, 24. Okt 2007, 10:48:00" entspricht folgendem Zeitstempel:
        int unixzeit = mktime(({0, 48, 09, 24, 09, 2007, 0, 01, 0}));

GESCHICHTE
        Eingefuehrt in LDMud 3.3.718.

SIEHE AUCH
        ctime(E), gmtime(E), localtime(E), time(E), utime(E)
