Het gebruik van de standaard C include file <time.h>.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.

De include file time.h is opgenomen in de C ANSI standaard. Deze headerfile bevat een aantal types en functies om te werken met het begrip tijd.

Dit zijn de belangrijkste types die in time.h gedefinieerd zijn:

time_t

Een tijdstip inclusief de datum kan in standaard C worden opgeslagen als een groot geheel getal. Dit getal geeft het aantal seconden aan dat verlopen is sinds 00:00:00 GMT, January 1, 1970. Om tijdstippen in deze vorm te kunnen gebruiken kun je een variabele genaamd tijd als volgt definiëren:

   time_t tijd;

De variabele tijd kan nu bewerkt worden met de volgende functies:
Functie Beschrijving
time(&tijd)
Haalt de huidige tijd en datum uit het operating systeem. Als de tijd en datum niet beschikbaar is wordt tijd gelijk aan -1.
ctime(&tijd)
Converteert de variabele tijd naar een string. Deze functie geeft een pointer naar de string terug.
localtime(&tijd)
Converteert de variabele tijd naar een voorgedefineerde structuur tm. Deze functie geeft een pointer naar een struct tm terug.

struct tm

In standaard C is een structuur gedefinieerd waarin de tijd kan worden opgeslagen. Dit is de struct tm. Om de struct te gebruiken wordt hieronder een variabele t gedeclareerd met:

   struct tm t;

De struct tm heeft de volgende veldnamen:

Veldnaam Beschrijving
tm_sec Seconden
tm_min Minuten
tm_hour Uren
tm_mday Dag van de maand (1..31)
tm_mon Maand (0=januari)
tm_year Jaar - 1900 (Dus 110 = 2010)
tm_wday Dag van de week (0=zondag)
tm_yday Dag van het jaar (0..365)
tm_isdst Zomertijd 0=Nee, >0=Ja, <0=Onbekend

De huidige tijd kan als volgt naar een struct tm worden omgezet:

    time_t tijd;
    struct tm* pt;
    time(&tijd);
    pt = localtime(&tijd);
    printf("De datum is: %02d-%02d-%4d.\n", pt->tm_mday, pt->tm_mon + 1, pt->tm_year + 1900);
    printf("De tijd is: %02d:%02d:%02d.\n", pt->tm_hour, pt->tm_min, pt->tm_sec);

De struct tm kan bewerkt worden met de volgende functies:
Functie Beschrijving
asctime(&t)
Converteert de structuur tm naar een string.
mktime(&t)
Conveerteert de structuur tm naar een variabele van het type t_time

Voorbeeldprogramma's.

Het programma demotijd.c  haalt de huidige tijd en datum op en drukt die op verschillende manieren af.

#include <stdio.h>
#include <time.h>

int main(void) {
    time_t tijd;
    struct tm* pt;
    /* De tijd en datum ophalen uit het operating systeem */
    time(&tijd);
    if (tijd != -1) {
        /* De tijd en datum afdrukken zonder het gebruik van de structuur tm */
        printf("Vandaag is het volgens het operating systeem van de computer:\n%s\n", ctime(&tijd));
        /* De tijd en datum omzetten naar de structuur tm*/
        pt = localtime(&tijd);
        /* De tijd en datum afdrukken met de structuur tm */
        printf("Vandaag is het dag %d van het jaar %d.\n", pt->tm_yday + 1, pt->tm_year + 1900);
        printf("De datum is: %02d-%02d-%4d.\n", pt->tm_mday, pt->tm_mon + 1, pt->tm_year + 1900);
        printf("De tijd is: %02d:%02d:%02d.\n", pt->tm_hour, pt->tm_min, pt->tm_sec);
        if (pt->tm_isdst >= 0) {
            printf("Het is ");
            if (pt->tm_isdst == 0) {
                printf("wintertijd.\n");
            }
            else {
                printf("zomertijd.\n");
            }
        }
    }
    else {
        printf("Datum en tijd zijn niet beschikbaar op dit systeem.\n");
    }
    getchar();
    return 0;
}

Uitvoer:

Het programma welkedag.c  leest een datum in en drukt dan af welke dag het op die datum is.

#include <stdio.h>
#include <time.h>

int main(void) {
    struct tm t, *pt;
    time_t tijd;
    char* dag[] = {"zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"};

    /* stuct tm t vullen */
    printf("Geef de datum.\n");
    do {
        printf("Dag (1..31): ");
        fflush(stdin);
    }
    while (scanf("%d", &t.tm_mday) != 1 || t.tm_mday < 1 || t.tm_mday > 31);
    do {
        printf("Maand (1..12): ");
        fflush(stdin);
    }
    while (scanf("%d", &t.tm_mon) != 1 || t.tm_mon < 1 || t.tm_mon > 12);
    t.tm_mon -= 1;
    do {
        printf("Jaar (1970..2037): ");
        fflush(stdin);
    }
    while (scanf("%d", &t.tm_year) != 1 || t.tm_year < 1970 || t.tm_year > 2037);
    t.tm_year -= 1900;

    t.tm_sec = 0;
    t.tm_min = 0;
    t.tm_hour = 0;
    t.tm_isdst = -1;

    /* struct tm omzetten naar een time_t */
    tijd = mktime(&t);

    if (tijd == -1) {
        printf("Ongeldige datum!\n");
    }
    else {
        /* time_t weer terug omzetten naar een struct tm */
        pt = localtime(&tijd);
        /* De dag van de week afdrukken */
        printf("%02d-%02d-%4d is een %s.\n", pt->tm_mday, pt->tm_mon + 1, pt->tm_year + 1900, dag[pt->tm_wday]);
    }
    fflush(stdin);
    getchar();
    return 0;
}

Uitvoer:

De ingetypte invoer is geel weergegeven.

Details.

Details over de in de include file time.h gedeclareerde types en functies kun je vinden op: http://en.cppreference.com/w/c/chrono.