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

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;
}