C:
Nykyisen päivämäärän hankkiminen
Kuinka:
C-kielessä otsikkotiedosto <time.h>
tarjoaa tarvittavat funktiot ja tyypit päivämäärien ja aikojen käsittelyyn. time()
-funktio hakee nykyisen ajan, kun taas localtime()
muuntaa tämän ajan paikalliseen aikavyöhykkeeseen. Päivämäärän näyttämiseksi käytämme strftime()
-funktiota sen muotoilemiseen merkkijonoksi.
Tässä on perusesimerkki:
#include <stdio.h>
#include <time.h>
int main() {
char buffer[80];
time_t rawtime;
struct tm *timeinfo;
// Hae nykyinen aika
time(&rawtime);
// Muunna se paikalliseksi ajaksi
timeinfo = localtime(&rawtime);
// Muotoile päivämäärä ja tulosta se
strftime(buffer, 80, "Tämän päivän päivämäärä on %Y-%m-%d", timeinfo);
printf("%s\n", buffer);
return 0;
}
Esimerkkitulostus voisi näyttää tältä:
Tämän päivän päivämäärä on 2023-04-12
Syväsukellus
C-kielessä ajan käsittely <time.h>
:n kautta juontaa juurensa kielen ja UNIX-järjestelmien alkuaikoihin. Se on rakennettu time_t
-tietotyypin ympärille, joka edustaa nykyistä aikaa sekuntien määränä Unix Epochista lähtien (1. tammikuuta 1970). Vaikka tämä on tehokasta ja universaalisti yhteensopivaa, se myös tarkoittaa, että standardin C-kirjaston aikafunktiot ovat perustavanlaatuisesti rajoittuneita time_t
:n tarkkuuden ja vaihteluvälin suhteen.
Nykysovellukset, erityisesti ne, jotka vaativat korkean tarkkuuden aikaleimoja tai käsittelevät kaukaisia tai menneitä päivämääriä, saattavat kokea nämä rajoitukset haastaviksi. Esimerkiksi Vuosi 2038 -ongelma on kuuluisa esimerkki, jossa 32-bittistä time_t
:a käyttävät järjestelmät ylivuotavat.
Monimutkaisemman ajan ja päivämäärien käsittelyn tarpeisiin monet ohjelmoijat kääntyvät ulkoisten kirjastojen tai käyttöjärjestelmän tarjoamien toimintojen puoleen. Esimerkiksi C++:ssa <chrono>
-kirjasto tarjoaa tarkempia ja monipuolisempia ajan käsittelyn mahdollisuuksia.
Huolimatta rajoituksistaan, C-kielen aikafunktioiden yksinkertaisuus ja yleisyys tekevät niistä täysin sopivia moniin sovelluksiin. Näiden työkalujen ymmärtäminen on olennaista C-ohjelmoijille, tarjoten sekoituksen historiallista ohjelmointikontekstia ja käytännöllistä, jokapäiväistä hyötyä.