C:
Sammenligne to datoer
Hvordan gjøres det:
C har ikke en innebygd type for datoer, noe som nødvendiggjør bruken av time.h
-biblioteket for å jobbe med datums- og tidsstrukturer. tm
-strukturen og difftime()
-funksjonen brukes ofte for å sammenligne datoer. Nedenfor er et eksempel som viser hvordan man sammenligner to datoer:
#include <stdio.h>
#include <time.h>
int main() {
struct tm date1 = {0};
struct tm date2 = {0};
double sekunder;
// Første dato (ÅÅÅÅ, MM, DD)
date1.tm_year = 2023 - 1900; // År siden 1900
date1.tm_mon = 3 - 1; // Måned [0-11]
date1.tm_mday = 15; // Dagen i måneden [1-31]
// Andre dato (ÅÅÅÅ, MM, DD)
date2.tm_year = 2023 - 1900;
date2.tm_mon = 4 - 1;
date2.tm_mday = 14;
// Konverter til time_t format
time_t time1 = mktime(&date1);
time_t time2 = mktime(&date2);
// Sammenligne
sekunder = difftime(time1, time2);
if (sekunder == 0) {
printf("Datoene er like.\n");
} else if (sekunder > 0) {
printf("Første dato kommer etter den andre datoen.\n");
} else {
printf("Første dato kommer før den andre datoen.\n");
}
return 0;
}
Output kunne være:
Første dato kommer før den andre datoen.
Dette programmet initialiserer to tm
-strukturer med spesifikke datoer, konverterer dem til time_t
-format ved hjelp av mktime()
, og sammenligner dem til slutt ved hjelp av difftime()
, som returnerer forskjellen i sekunder (som en double
) mellom de to tidspunktene.
Dypdykk
I de tidlige dagene av C krevde dato- og tidsoperasjoner manuelle beregninger, ofte under hensyn til skuddår, det varierende antall dager i månedene, og til og med skuddsekunder. Innføringen av time.h
i ANSI C-standarden brakte standardisering til håndtering av tid i C, noe som forenklet operasjoner med dato og tid.
Bruk av time.h
for datoomparasjon er greit, men har begrensninger. tm
-strukturen tar ikke hensyn til tidssoner eller sommertid, og difftime()
gir kun forskjellen i sekunder, og mangler finere granularitet for visse applikasjoner.
For applikasjoner som krever mer robuste dato-tidsoperasjoner, inkludert støtte for tidssoner, overganger for sommertid, og mer presise tidsintervaller, tilbyr biblioteker som date.h
(et Howard Hinnant-datobibliotek, ikke en del av standardbiblioteket) et moderne alternativ til time.h
. Disse bibliotekene gir mer omfattende verktøy for dato-tidsmanipulering i C++, og drar nytte av tiår med evolusjon i programmeringsspråkdesign. For C-programmerere forblir det nødvendig å benytte seg av disse eksterne bibliotekene eller nøye håndtere detaljene i dato-tidsberegninger direkte for å oppnå presis og kulturelt bevisst dato-tidsmanipulering.