C/tm
< C
Deklaracja
edytujstruct 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
edytujOpis
edytujKolejne 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
edytujStruktury 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
edytujPoniż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
edytujPoniż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
edytujPoniż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; }