C/tm

Z Wikibooks, biblioteki wolnych podręczników.
< C

Deklaracja[edytuj]

struct tm {
    int     tm_sec;         /* sekundy od pełnej minuty*/
    int     tm_min;         /* minuty  od pełnej godziny*/
    int     tm_hour;        /* godzina na 24-godzinnym zegarze*/
    int     tm_mday;        /* dzień miesiąca */
    int     tm_mon;         /* miesiąc licząc od zera */
    int     tm_year;        /* rok - 1900 */
    int     tm_wday;        /* dzień tygodnia niedziela ma numer 0*/
    int     tm_yday;        /* dzień roku licząc od zera*/
    int     tm_isdst;       /* znacznik czasu letniego */
};

Plik nagłówkowy[edytuj]

time.h

Opis[edytuj]

Kolejne elementy struktury oznaczają:

tm_sec
Liczba sekund po pełnej minucie. Liczba z zakresu 0-59. W nadzwyczajnym przypadku (dodanie sekund w celu dostosowania czasu do czasu astronomicznego) może przyjmować wartość 60 albo nawet 61.
tm_min
Liczba minut po pełnej godzinie. Liczba z zakresu 0-59.
tm_hour
Godzina. Liczba godzin od północy. Liczba z zakresu 0-23.
tm_mday
Dzień miesiąca. Liczba z zakresu 1-31.
tm_mon
Liczba miesięcy, które upłynęły od początku roku. Liczba z zakresu 0-11.
tm_year
Liczba lat od roku 1900.
tm_wday
Numer dnia tygodnia, licząc od niedzieli, która ma numer 0. Liczba z zakresu 0-6.
tm_yday
Numer dnia w roku licząc od zera. Liczba z zakresu 0-365.
tm_isdst
Wartość wskazująca czy obowiązuje czas letni. Wartość dodatnia, gdy obowiązuje czas letni. Wartość zero, gdy obowiązuje czas standardowy. Wartość ujemna, gdy brak odpowiedniej informacji.

Wykorzystanie[edytuj]

Struktury tm używają funkcje: mktime, asctime, gmtime, localtime, strftime.

Mogą jej używać też funkcje spoza biblioteki standardowej; przykładami takich funkcji są: asctime_r, gmtime_r, localtime_r, strptime.


Przykład użycia[edytuj]

Poniższy program uruchomiony w dniu 28 grudnia roku (przestępnego) 2004 daje w wyniku napis:

dziś jest 363 dzień roku
miesiąc jest 12
#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t liczba_sekund;
    struct tm strukt;
    time(&liczba_sekund);
    localtime_r(&liczba_sekund, &strukt);
    printf("dziś jest %d dzień roku\nmiesiąc jest %d\n",
           strukt.tm_yday+1, strukt.tm_mon+1);
    return 0;
}

Przykład 2[edytuj]

Poniższa linijka pokazuje warunki na sprawdzenie roku przestępnego:

if ( rok % 4 ==0 && rok % 100 != 0 || rok % 400 == 0)
   luty = 29;
else
   luty = 28;

Przykład 3[edytuj]

Poniższa funkcja zwraca dzień tygodnia, dla zadanej daty: zamiast tm_wday

int dayofweek(int y, int m, int d)	/* 0 = Niedziela */
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}