© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - TH Rijswijk/Academie voor Engineering.
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 tijd is: %02d:%02d:%02d.\n", pt->tm_hour, pt->tm_min, pt->tm_sec);
printf("De datum is: %02d-%02d-%4d.\n", pt->tm_mday, pt->tm_mon+1, pt->tm_year+1900);
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 |
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() {struct tm* pt;time_t tijd;/* De tijd en datum ophalen uit het operating systeem */time(&tijd);if (tijd!=-1) {/* De tijd 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 omzetten naar de structuur tm*/pt=localtime(&tijd);/* De tijd 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() {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 over de in de include file time.h gedeclareerde types en functies kun je vinden op: http://www.opengroup.org/onlinepubs/009695399/basedefs/time.h.html.