Tolke en dato fra en streng

C:
Tolke en dato fra en streng

Hvordan:

C tilbyr ikke en innebygd måte å analysere datoer fra strenger direkte på, så vi tyr ofte til strptime-funksjonen tilgjengelig i biblioteket <time.h> for POSIX-systemer. Denne funksjonen gir oss mulighet til å spesifisere det forventede formatet for inngangsstrengen og analysere den inn i en struct tm, som representerer kalenderdato og tid nedbrutt i dens komponenter.

Her er et enkelt eksempel på hvordan du bruker strptime til å analysere en dato fra en streng:

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

int main() {
    const char *dateStr = "2023-04-01";
    struct tm tm;
    char buf[255];

    // Analysere datostrengen til struct tm
    if (strptime(dateStr, "%Y-%m-%d", &tm) == NULL) {
        printf("Klarte ikke å analysere dato.\n");
    } else {
        // Bruke strftime for å skrive ut datoen i et leselig format
        strftime(buf, sizeof(buf), "%A, %B %d, %Y", &tm);
        printf("Analysert dato: %s\n", buf);
    }

    return 0;
}

Eksempel på utdata for dette programmet ville være:

Analysert dato: Lørdag, april 01, 2023

Det er essensielt å håndtere potensielle feil, som at strptime ikke klarer å matche mønsteret eller støter på uventet inngang.

Dypdykk

strptime-funksjonen, selv om den er kraftfull, er ikke en del av det standard C-biblioteket og finnes hovedsakelig på POSIX-kompatible systemer som Linux og UNIX. Denne begrensningen betyr at programmer som er avhengige av strptime for å analysere datoer fra strenger, kanskje ikke er bærbare til ikke-POSIX-systemer som Windows uten ekstra kompatibilitetslag eller biblioteker.

Historisk sett krevde håndtering av datoer og klokkeslett i C mye manuell manipulering og omsorg, spesielt med tanke på ulike lokaliteter og tidssoner. Moderne alternativer og utvidelser til C, som C++’s <chrono>-bibliotek og tredjepartsbiblioteker som Howard Hinnants datobibliotek for C++, tilbyr mer robuste løsninger for dato- og tidsmanipulering, inkludert analyse. Disse bibliotekene gir vanligvis bedre støtte for et bredere utvalg av datofortolkninger, tidssoner og feilhåndteringsmekanismer, noe som gjør dem foretrukket for nye prosjekter som krever omfattende dato- og tidsmanipuleringsegenskaper.

Ikke desto mindre kan forståelsen av hvordan man analyserer datoer fra strenger i C være gunstig, spesielt når man jobber med eller vedlikeholder prosjekter som må være kompatible med systemer der disse moderne verktøyene ikke er tilgjengelige eller når man jobber innenfor begrensningene av strenge C-programmeringsmiljøer.