C:
Jämföra två datum

Hur:

C saknar en inbyggd typ för datum, vilket nödvändiggör användningen av time.h-biblioteket för att arbeta med datum- och tidsstrukturer. Strukturen tm och funktionen difftime() används ofta för att jämföra datum. Nedan är ett exempel som visar hur man jämför två datum:

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

int main() {
    struct tm date1 = {0};
    struct tm date2 = {0};
    double sekunder;

    // Första datumet (ÅÅÅÅ, MM, DD)
    date1.tm_year = 2023 - 1900; // År sedan 1900
    date1.tm_mon = 3 - 1;        // Månad [0-11]
    date1.tm_mday = 15;          // Dag i månaden [1-31]

    // Andra datumet (ÅÅÅÅ, MM, DD)
    date2.tm_year = 2023 - 1900;
    date2.tm_mon = 4 - 1;
    date2.tm_mday = 14;

    // Konvertera till time_t-format
    time_t time1 = mktime(&date1);
    time_t time2 = mktime(&date2);

    // Jämför
    sekunder = difftime(time1, time2);

    if (sekunder == 0) {
        printf("Datumen är samma.\n");
    } else if (sekunder > 0) {
        printf("Första datumet kommer efter det andra datumet.\n");
    } else {
        printf("Första datumet kommer före det andra datumet.\n");
    }

    return 0;
}

Output kan vara:

Första datumet kommer före det andra datumet.

Det här programmet initierar två tm-strukturer med specifika datum, konverterar dem till time_t-format med mktime() och jämför dem slutligen med difftime(), som returnerar skillnaden i sekunder (som en double) mellan de två tidpunkterna.

Fördjupning

I C:s tidiga dagar krävde datum- och tidsoperationer manuella beräkningar, ofta med hänsyn till skottår, den varierande antalet dagar i månaderna, och till och med skottsekunder. Introduktionen av time.h i ANSI C-standarden medförde standardisering till tidsbehandling i C, vilket förenklade datum- och tidsoperationer.

Att använda time.h för datumjämförelse är enkelt men har begränsningar. Strukturen tm tar inte hänsyn till tidszoner eller sommartid, och difftime() ger endast skillnaden i sekunder, och saknar finare granularitet för vissa applikationer.

För applikationer som kräver mer robusta datum-tidsoperationer, inklusive stöd för tidszoner, övergångar för sommartid och mer exakta tidsintervall, erbjuder bibliotek som date.h (ett Howard Hinnant-datum bibliotek, inte en del av standardbiblioteket) ett modernt alternativ till time.h. Dessa bibliotek ger mer omfattande verktyg för datum-tidsmanipulation i C++, och drar nytta av årtionden av utveckling i programmeringsspråksdesign. För C-programmerare kvarstår behovet av att använda dessa externa bibliotek eller noggrant hantera komplexiteten i datum-tidsberäkningar direkt för att uppnå precis och kulturellt medveten datum-tidsmanipulation.