C/tm
Wygląd
< C
(Przekierowano z Programowanie:C:tm)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]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;
}