.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, David Metcalfe .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ctime 3 "8 lutego 2026 r." "Linux man\-pages 6.18" .SH NAZWA asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r, localtime_r \- konwertuje daty i czas do postaci czasu rozłożonego lub ASCII .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .P \fBchar *asctime(const struct tm *\fP\fItm\fP\fB);\fP \fBchar *asctime_r(const struct tm *restrict \fP\fItm\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict 26]);\fP .P \fBchar *ctime(const time_t *\fP\fItimep\fP\fB);\fP \fBchar *ctime_r(const time_t *restrict \fP\fItimep\fP\fB,\fP \fB char \fP\fIbuf\fP\fB[restrict 26]);\fP .P \fBstruct tm *gmtime(const time_t *\fP\fItimep\fP\fB);\fP \fBstruct tm *gmtime_r(const time_t *restrict \fP\fItimep\fP\fB,\fP \fB struct tm *restrict \fP\fIresult\fP\fB);\fP .P \fBstruct tm *localtime(const time_t *\fP\fItimep\fP\fB);\fP \fBstruct tm *localtime_r(const time_t *restrict \fP\fItimep\fP\fB,\fP \fB struct tm *restrict \fP\fIresult\fP\fB);\fP .P \fBtime_t mktime(struct tm *\fP\fItm\fP\fB);\fP .fi .P .RS -4 Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)): .RE .P \fBasctime_r\fP(), \fBctime_r\fP(), \fBgmtime_r\fP(), \fBlocaltime_r\fP(): .nf _POSIX_C_SOURCE || /* glibc w wersji <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH OPIS Funkcje \fBctime\fP(), \fBgmtime\fP() oraz \fBlocaltime\fP() przyjmują argument typu \fItime_t\fP, reprezentujący czas kalendarzowy. Zinterpretowany jako bezwzględna wartość czasu określa liczbę sekund, jakie upłynęły od początku epoki, to jest od 1970\-01\-01 00:00:00 +0000 (UTC). .P Funkcje \fBasctime\fP() oraz \fBmktime\fP() przyjmują jako argument czas rozłożony, który jest reprezentacją podzieloną na rok, miesiąc, dzień itd. .P Czas rozłożony jest przechowywany w strukturze \fItm\fP, opisanej w podręczniku \fBtm\fP(3type). .P Wywołanie \fBctime(\fP\fIt\fP\fB)\fP jest równoważne \fIasctime(localtime(t))\fP. Przekształca czas kalendarzowy \fIt\fP na zakończony znakiem null łańcuch o postaci .P .in +4n .EX "śro, sty 30 21:49:08 1993\[rs]n" .EE .in .P Skróty dni tygodnia to "nie", "pon", "wto", "śro", "czw", "pią" i "sob". Skróty miesięcy to "sty", "lut", "mar", "kwi", "maj", "cze", "lip", "sie", "wrz", "paź", "lis" i "gru". Zwracany jest wskaźnik do statycznego łańcucha, który może zostać nadpisany przy kolejnym wywołaniu dowolnej funkcji daty i czasu. Funkcja ustawia również zewnętrzne zmienne \fItzname\fP, \fItimezone\fP i \fIdaylight\fP tak, jakby wywoływała \fBtzset\fP(3). Wielowątkowa wersja tej funkcji, \fBctime_r\fP(), robi to samo, ale zapisuje łańcuch w podanym przez użytkownika buforze, który powinien móc pomieścić co najmniej 26 znaków. Nie musi ona ustawiać zmiennych \fItzname\fP, \fItimezone\fP, i \fIdaylight\fP. .P Funkcja \fBgmtime\fP() przekształca czas kalendarzowy \fItimep\fP na czas rozłożony, wyrażony w Coordinated Universal Time (UTC). Może zwrócić wartość NULL, jeśli rok nie daje się zapisać jako liczba całkowita. Zwracany jest wskaźnik do statycznej struktury, która to struktura może zostać nadpisana przy kolejnym wywołaniu dowolnej funkcji daty i czasu. Funkcja \fBgmtime_r\fP() robi to samo, ale zapisuje dane do struktury podanej przez użytkownika. .P Funkcja \fBlocaltime\fP() przekształca czas kalendarzowy \fItimep\fP na czas rozłożony, wyrażony względem wybranej przez użytkownika strefy czasowej. Funkcja ustawia również zewnętrzne zmienne \fItzname\fP, \fItimezone\fP i \fIdaylight\fP tak, jakby wywoływała \fBtzset\fP(3). Zwracany jest wskaźnik do statycznej struktury, która może zostać nadpisana przy kolejnym wywołaniu dowolnej funkcji daty i czasu. Funkcja \fBlocaltime_r\fP() robi to samo, ale zapisuje dane do struktury podanej przez użytkownika. Nie musi ona ustawiać zmiennych \fItzname\fP, \fItimezone\fP i \fIdaylight\fP. .P Funkcja \fBasctime\fP() przekształca czas rozłożony \fItm\fP na zakończony bajtem null łańcuch tego samego formatu, co \fBctime\fP(). Zwracany jest wskaźnik do statycznego łańcucha, który to łańcuch może zostać nadpisany przy kolejnym wywołaniu dowolnej funkcji daty i czasu. Funkcja \fBasctime_r\fP() robi to samo, ale zapisuje łańcuch w podanym przez użytkownika buforze o długości co najmniej 26 bajtów. .P Funkcja \fBmktime\fP() przekształca strukturę czasu rozłożonego, wyrażoną w czasie lokalnym, na czas kalendarzowy. Funkcja ignoruje podane przez wywołującego wartości elementów \fItm_wday\fP oraz \fItm_yday\fP. Wartość podana w polu \fItm_isdst\fP informuje funkcję \fBmktime\fP() o tym, czy dla czasu podanego w strukturze \fItm\fP używany był czas letni (DST \- daylight saving time), czy też nie był używany: wartość dodatnia oznacza, że DST był używany, zero \- że nie był, a wartość ujemna nakazuje funkcji \fBmktime\fP() podjęcie próby sprawdzenia (w systemowej bazie danych informacji o strefach czasowych), czy DST był używany w podanym czasie. Odpowiednikiem tej funkcji w UTC jest \fBtimegm\fP(3). .P Funkcja \fBmktime\fP() modyfikuje pola struktury \fItm\fP jak następuje: \fItm_wday\fP i \fItm_yday\fP są ustawiane na wartości określane na podstawie wartości innych pól. Jeśli elementy struktury mają wartości spoza zakresu wartości dopuszczalnych, to zostaną znormalizowane (w taki sposób, że np. 40 października zostanie zamieniony na 9 listopada). \fItm_isdst\fP jest ustawiane (niezależnie od jej początkowej wartości) na wartość dodatnią lub na 0, aby wskazać \- odpowiednio \- czy w podanym czasie DST był używany, czy też nie był. Funkcja ustawia również zewnętrzne zmienne \fItzname\fP, \fItimezone\fP i \fIdaylight\fP tak, jakby wywoływała \fBtzset\fP(3). .P Jeśli podany czas rozłożony nie może być reprezentowany jako czas kalendarzowy (sekundy od początku epoki), \fBmktime\fP() zwraca \fI(time_t)\ \-1\fP i nie zmienia pól w podzielonej strukturze czasu. .SH "WARTOŚĆ ZWRACANA" \fBgmtime\fP() oraz \fBlocaltime\fP(), gdy się zakończą pomyślnie, zwracają wskaźnik do \fIstruct\ tm\fP. .P \fBgmtime_r\fP() oraz \fBlocaltime_r\fP(), gdy się zakończą pomyślnie, zwracają adres struktury wskazywanej przez \fIresult\fP. .P \fBasctime\fP() oraz \fBctime\fP(), gdy się zakończą pomyślnie, zwracają wskaźnik do łańcucha znaków .P \fBasctime_r\fP() oraz \fBctime_r\fP(), gdy się zakończą pomyślnie, zwracają wskaźnik do łańcucha znaków, na który wskazuje argument \fIbuf\fP. .P \fBmktime\fP, gdy zakończy się pomyślnie, zwraca czas kalendarzowy (w sekundach od początku epoki [tj. 1970\-01\-01 00:00:00 +0000 \-przyp. tłum.]), wyrażony jako wartość typu \fItime_t\fP .P W razie błędu, \fBmktime\fP() zwraca wartość \fI(time_t)\ \-1\fP i pozostawia składową \fItm\->tm_wday\fP bez modyfikacji. Pozostałe funkcje w przypadku błędu zwracają NULL. Ustawiane jest też \fIerrno\fP, wskazując błąd. .SH BŁĘDY .TP \fBEOVERFLOW\fP Wynik jest niereprezentowalny. .SH ATRYBUTY Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku \fBattributes\fP(7). .TS allbox; lb lb lbx l l l. Interfejs Atrybut Wartość T{ .na .nh \fBasctime\fP() T} Bezpieczeństwo wątkowe T{ .na .nh MT\-niebezpieczne race:asctime locale T} T{ .na .nh \fBasctime_r\fP() T} Bezpieczeństwo wątkowe T{ .na .nh MT\-bezpieczne locale T} T{ .na .nh \fBctime\fP() T} Bezpieczeństwo wątkowe T{ .na .nh MT\-niebezpieczne race:tmbuf race:asctime env locale T} T{ .na .nh \fBctime_r\fP(), \fBgmtime_r\fP(), \fBlocaltime_r\fP(), \fBmktime\fP() T} Bezpieczeństwo wątkowe T{ .na .nh MT\-bezpieczne env locale T} T{ .na .nh \fBgmtime\fP(), \fBlocaltime\fP() T} Bezpieczeństwo wątkowe T{ .na .nh MT\-niebezpieczne race:tmbuf env locale T} .TE .SH WERSJE POSIX nie określa parametrów \fBctime_r\fP() jako \fIrestrict\fP; jest to typowe dla glibc. .P Wiele implementacji, włączając glibc, interpretuje 0 w \fItm_mday\fP jako ostatni dzień poprzedniego miesiąca. .P .\" See http://thread.gmane.org/gmane.comp.time.tz/2034/ Według POSIX.1, \fBlocaltime\fP() musi się zachowywać tak, jakby \fBtzset\fP(3) było wywołane, w przypadku zaś \fBlocaltime_r\fP() nie ma takiego wymagania. W przenośnym kodzie \fBtzset\fP(3) powinno być wywołanie przed \fBlocaltime_r\fP(). .SH STANDARDY .TP \fBasctime\fP() .TQ \fBctime\fP() .TQ \fBgmtime\fP() .TQ \fBlocaltime\fP() .TQ \fBmktime\fP() C23, POSIX.1\-2024. .TP \fBgmtime_r\fP() .TQ \fBlocaltime_r\fP() POSIX.1\-2024. .TP \fBasctime_r\fP() .TQ \fBctime_r\fP() Brak. .SH HISTORIA .TP \fBgmtime\fP() .TQ \fBlocaltime\fP() .TQ \fBmktime\fP() C89, POSIX.1\-1988. .TP \fBasctime\fP() .TQ \fBctime\fP() C89, POSIX.1\-1988. Oznaczone jako przestarzałe w C23 i w POSIX.1\-2008 (z zaleceniem stosowania \fBstrftime\fP(3)). .TP \fBgmtime_r\fP() .TQ \fBlocaltime_r\fP() POSIX.1\-1996. .TP \fBasctime_r\fP() .TQ \fBctime_r\fP() POSIX.1\-1996. Oznaczone jako przestarzałe w POSIX.1\-2008. Usunięte w POSIX.1\-2024 (zalecając \fBstrftime\fP(3)). .SH ZASTRZEŻENIA .SS "Bezpieczeństwo wątkowe" Następujące cztery funkcje \fBacstime\fP(), \fBctime\fP(), \fBgmtime\fP() i \fBlocaltime\fP() zwracają wskaźnik do statycznych danych i w związku z tym nie są przystosowane do wielowątkowości. Wielowątkowe wersje \fBacstime_r\fP(), \fBctime_r\fP(), \fBgmtime_r\fP() i \fBlocaltime_r\fP() są wymienione w SUSv2. .P POSIX.1 mówi: "Funkcje \fBasctime\fP(), \fBctime\fP(), \fBgmtime\fP() oraz \fBlocaltime\fP() powinny zwrócić wartości w jednym z dwóch statycznych obiektów: podzielonej strukturze czasu i tablicy znaków typu \fIchar\fP. Wywołanie którejkolwiek z tych funkcji zwracającej wskaźnik do jednego z tych obiektów, może nadpisać informacje w którymkolwiek z obiektów tego samego typu, na który wskazuje wartość zwrócona przez dowolne poprzednie wywołanie którejkolwiek z funkcji". Może się to zdarzyć w implementacji zastosowanej w bibliotece glibc. .SS mktime() \fI(time_t) \-1\fP może reprezentować prawidłowy czas (jedna sekunda przed Epoką). Aby sprawdzić, czy \fBmktime\fP() zawiodło, konieczne jest użycie pola \fItm\->tm_wday\fP. Zob. przykładowy program w PRZYKŁADACH. .P Obsługa nieujemnego \fItm_isdst\fP w \fBmktime\fP() jest niedookreślona, a przekazanie wartości, która jest nieprawidłowa dla podanego czasu, daje nieokreślone skutki. Ponieważ \fBmktime\fP() jest jedną z niewielu funkcji wiedzących o tym, czy czas letni (DST) jest w mocy, przekazanie prawidłowej wartości może być trudne. Jednym z obejść tego problemu jest wywołanie \fBmktime\fP() dwukrotnie, raz z \fItm_isdst\fP ustawionym na zero i raz z \fItm_isdst\fP ustawionym na wartość dodatnią, a następnie odrzucenie wyników z wywołania, które go zmieni. Jeśli żadne z wywołań nie zmieni \fItm_isdst\fP, to podany czas prawdopodobnie wypada w okresie przejściowym, gdy następuje początek lub koniec czasu letniego, zatem oba wyniki są prawidłowe, ale oznaczają dwa różne punkty w czasie. Jeśli oba wywołania go zmieniają, może to być również okres przejściowy czasu letniego, albo jakiś inny powód, z którego podany czas nie istnieje. .P Określenie stref czasowych i czasu letniego zależy od lokalnych rządów, często się zmienia i może zawierać nieciągłości poza możliwością udokumentowania przez \fImktime\fP. Na przykład zmiana w definicji strefy czasowej może spowodować powtórzenie lub pominięcie czasu zegara, bez odpowiadającej zmiany czasu letniego. .SH PRZYKŁADY Poniższy program definiuje opakowanie pozwalające na wykrycie czasów nieprawidłowych i niejednoznacznych, z błędami, odpowiednio, \fBEINVAL\fP i \fBENOTUNIQ\fP. .P Poniższa sesja powłoki pokazuje przykładowy przebieg programu: .P .in +4n .EX $\ \fBTZ=UTC ./a.out 1969 12 31 23 59 59 0\fP; \-1 $ $\ \fBexport TZ=Europe/Madrid\fP; $ $\ \fB./a.out 2147483647 2147483647 00 00 00 00 \-1\fP; a.out: mktime: Value too large for defined data type $ $\ \fB./a.out 2024 08 23 00 17 53 \-1\fP; 1724365073 $\ \fB./a.out 2024 08 23 00 17 53 0\fP; a.out: my_mktime: Invalid argument 1724368673 $\ \fB./a.out 2024 08 23 00 17 53 1\fP; 1724365073 $ $\ \fB./a.out 2024 02 23 00 17 53 \-1\fP; 1708643873 $\ \fB./a.out 2024 02 23 00 17 53 0\fP; 1708643873 $\ \fB./a.out 2024 02 23 00 17 53 1\fP; a.out: my_mktime: Invalid argument 1708640273 $ $\ \fB./a.out 2023 03 26 02 17 53 \-1\fP; a.out: my_mktime: Invalid argument 1679793473 $ $\ \fB./a.out 2023 10 29 02 17 53 \-1\fP; a.out: my_mktime: Name not unique on network 1698542273 $\ \fB./a.out 2023 10 29 02 17 53 0\fP; 1698542273 $\ \fB./a.out 2023 10 29 02 17 53 1\fP; 1698538673 $ $\ \fB./a.out 2023 02 29 12 00 00 \-1\fP; a.out: my_mktime: Invalid argument 1677668400 .EE .SS "Kod źródłowy programu: mktime.c" .\" SRC BEGIN (mktime.c) \& .EX #include #include #include #include #include #include #include \& #define is_signed(T) ((T) \-1 < 1) \& static time_t my_mktime(struct tm *tp); \& int main(int argc, char *argv[]) { char **p; time_t t; struct tm tm; \& if (argc != 8) { fprintf(stderr, "Użycie: %s rrrr mm dd GG MM SS czyletni\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& p = &argv[1]; tm.tm_year = atoi(*p++) \- 1900; tm.tm_mon = atoi(*p++) \- 1; tm.tm_mday = atoi(*p++); tm.tm_hour = atoi(*p++); tm.tm_min = atoi(*p++); tm.tm_sec = atoi(*p++); tm.tm_isdst = atoi(*p++); \& errno = 0; tm.tm_wday = \-1; t = my_mktime(&tm); if (tm.tm_wday == \-1) err(EXIT_FAILURE, "mktime"); if (errno == EINVAL || errno == ENOTUNIQ) warn("my_mktime"); \& if (is_signed(time_t)) printf("%jd\[rs]n", (intmax_t) t); else printf("%ju\[rs]n", (uintmax_t) t); \& exit(EXIT_SUCCESS); } \& static time_t my_mktime(struct tm *tp) { int e, isdst; time_t t; struct tm tm; unsigned char wday[sizeof(tp\->tm_wday)]; \& e = errno; \& tm = *tp; isdst = tp\->tm_isdst; \& memcpy(wday, &tp\->tm_wday, sizeof(wday)); tp\->tm_wday = \-1; t = mktime(tp); if (tp\->tm_wday == \-1) { memcpy(&tp\->tm_wday, wday, sizeof(wday)); return \-1; } \& if (isdst == \-1) tm.tm_isdst = tp\->tm_isdst; \& if ( tm.tm_sec != tp\->tm_sec || tm.tm_min != tp\->tm_min || tm.tm_hour != tp\->tm_hour || tm.tm_mday != tp\->tm_mday || tm.tm_mon != tp\->tm_mon || tm.tm_year != tp\->tm_year || tm.tm_isdst != tp\->tm_isdst) { errno = EINVAL; return t; } \& if (isdst != \-1) goto out; \& tm = *tp; tm.tm_isdst = !tm.tm_isdst; \& tm.tm_wday = \-1; mktime(&tm); if (tm.tm_wday == \-1) goto out; \& if (tm.tm_isdst != tp\->tm_isdst) { errno = ENOTUNIQ; return t; } out: errno = e; return t; } .EE .\" SRC END .SH "ZOBACZ TAKŻE" \fBdate\fP(1), \fBgettimeofday\fP(2), \fBtime\fP(2), \fButime\fP(2), \fBclock\fP(3), \fBdifftime\fP(3), \fBstrftime\fP(3), \fBstrptime\fP(3), \fBtimegm\fP(3), \fBtzset\fP(3), \fBtime\fP(7) .PP .SH TŁUMACZENIE Tłumaczenie niniejszej strony podręcznika: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .