© 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.