getdate(3) Library Functions Manual getdate(3) NAZWA getdate, getdate_r - dziela tekstowa date z czasem na osobne pola BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include struct tm *getdate(const char *string); extern int getdate_err; int getdate_r(const char *restrict string, struct tm *restrict res); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): getdate(): _XOPEN_SOURCE >= 500 getdate_r(): _GNU_SOURCE OPIS Funkcja getdate() przeksztalca tekstowa reprezentacje daty i czasu, przekazana w buforze wskazywanym przez string, na osobne pola zawierajace rozlozony czas. Ten rozlozony czas jest przechowywany w strukturze tm, do ktorej wskaznik jest zwracany jako wynik funkcji. Zwracana struktura tm moze sie znajdowac w pamieci statycznej, wobec czego zostanie nadpisana przez kolejne wywolania funkcji getdate(). W odroznieniu od strptime(3) (ktora przyjmuje argument format), getdate() posluguje sie formatami znajdujacymi sie w pliku, do ktorego pelna sciezka jest podana w zmiennej srodowiskowej DATEMSK. Do konwersji stosowana jest pierwsza z linii pliku, ktora pasuje do zadanego lancucha. Podczas dopasowywania ignorowana jest wielkosc liter. Ignorowane sa rowniez nadmiarowe biale znaki, zarowno we wzorcu, jak i w przeksztalcanym lancuchu. Specyfikacje przeksztalcen, ktore moga byc zawarte we wzorcu sa takie same, jak dla strptime(3). Jedna dodatkowa specyfikacja przeksztalcenia jest opisana w standardzie POSIX.1-2001: %Z Nazwa strefy czasowej. Glibc tego nie implementuje. Gdy podano %Z, to struktura zawierajaca rozlozony czas jest inicjowana wartosciami odpowiadajacymi biezacemu czasowi w podanej strefie czasowej. W przeciwnym przypadku, jest inicjowana jako rozlozony czas odpowiadajacy biezacemu czasowi lokalnemu (tak jak w przypadku wywolania funkcji localtime(3)). Gdy podany jest tylko dzien tygodnia, brany jest pierwszy taki dzien przypadajacy w dniu biezacym lub pozniej. Gdy podany jest jedynie miesiac (bez roku), brany jest pierwszy taki miesiac przypadajacy w miesiacu biezacym lub po nim. Gdy nie podano dnia, brany jest pierwszy dzien miesiaca. When no hour, minute, and second are given, the current hour, minute, and second are taken. Gdy nie podano daty, ale znana jest godzina, brana jest pierwsza taka godzina przypadajaca w biezacej godzinie lub pozniej. getdate_r() jest rozszerzeniem GNU. Jest to bezpieczna dla watkow wersja getdate(), ktora zamiast uzywac globalnej zmiennej do raportowania bledow oraz statycznego bufora na rozlozony czas, zwraca bledy jako wynik funkcji oraz zwraca rozlozony czas w zaalokowanej przez funkcje wywolujaca strukturze wskazywanej przez argument res. WARTOSC ZWRACANA Po pomyslnym zakonczeniu getdate() zwraca wskaznik do struktury struct tm. W przeciwnym razie zwraca NULL i ustawia zmienna globalna getdate_err na jeden z ponizej podanych numerow bledow. Zmiany errno nie sa okreslone. W przypadku powodzenia getdate_r() zwraca zero. W przeciwnym wypadku zwraca jeden z ponizej podanych numerow bledow. BLEDY Ponizsze bledy sa zwracane albo poprzez getdate_err (w przypadku getdate()), albo jako wynik funkcji (w przypadku getdate_r()): 1 Zmienna srodowiska DATEMSK nie jest zdefiniowana lub ma pusta wartosc. 2 Nie udalo sie otworzyc pliku wzorcow okreslonego przez DATEMSK w trybie do odczytu. 3 Nie udalo sie pobrac informacji o stanie. 4 Plik wzorcow nie jest zwyklym plikiem. 5 Wystapil blad podczas odczytu pliku wzorcow. 6 Nie udalo sie przydzielic pamieci (brak dostepnej pamieci). 7 Brak w pliku linii pasujacej do podanych danych. 8 Niewlasciwa specyfikacja wejsciowa. SRODOWISKO DATEMSK Plik zawierajacy wzorce formatow. TZ LC_TIME Zmienne uzywane przez strptime(3). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +------------+--------------------------+------------------------------+ |Interfejs | Atrybut | Wartosc | +------------+--------------------------+------------------------------+ |getdate() | Bezpieczenstwo watkowe | MT-Unsafe race:getdate env | | | | locale | +------------+--------------------------+------------------------------+ |getdate_r() | Bezpieczenstwo watkowe | MT-bezpieczne env locale | +------------+--------------------------+------------------------------+ WERSJE Standard POSIX.1 dla strptime(3) zawiera specyfikacje przeksztalcen korzystajace z modyfikatorow %E lub %O, podczas gdy takie specyfikacje nie zostaly podane dla getdate(). Implementacja w glibc realizuje getdate() za pomoca strptime(3), wiec automatycznie obie funkcje wspieraja te same specyfikacje przeksztalcen. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001. PRZYKLADY Ponizszy program wywoluje getdate() dla kazdego z argumentow linii polecen i po kazdym takim wywolaniu wyswietla wartosci pol zwroconej struktury tm. Nastepujaca sesja powloki obrazuje dzialanie programu: $ TFILE=$PWD/tfile $ echo '%A' > $TFILE # Full name of the day of the week $ echo '%T' >> $TFILE # Time (HH:MM:SS) $ echo '%F' >> $TFILE # ISO date (YYYY-MM-DD) $ date $ export DATEMSK=$TFILE $ ./a.out Tuesday '2009-12-28' '12:22:33' Sun Sep 7 06:03:36 CEST 2008 Call 1 ("Tuesday") succeeded: tm_sec = 36 tm_min = 3 tm_hour = 6 tm_mday = 9 tm_mon = 8 tm_year = 108 tm_wday = 2 tm_yday = 252 tm_isdst = 1 Call 2 ("2009-12-28") succeeded: tm_sec = 36 tm_min = 3 tm_hour = 6 tm_mday = 28 tm_mon = 11 tm_year = 109 tm_wday = 1 tm_yday = 361 tm_isdst = 0 Call 3 ("12:22:33") succeeded: tm_sec = 33 tm_min = 22 tm_hour = 12 tm_mday = 7 tm_mon = 8 tm_year = 108 tm_wday = 0 tm_yday = 250 tm_isdst = 1 Kod zrodlowy programu #define _GNU_SOURCE #include #include #include int main(int argc, char *argv[]) { struct tm *tmp; for (size_t j = 1; j < argc; j++) { tmp = getdate(argv[j]); if (tmp == NULL) { printf("Call %zu failed; getdate_err = %d\n", j, getdate_err); continue; } printf("Call %zu (\"%s\") succeeded:\n", j, argv[j]); printf(" tm_sec = %d\n", tmp->tm_sec); printf(" tm_min = %d\n", tmp->tm_min); printf(" tm_hour = %d\n", tmp->tm_hour); printf(" tm_mday = %d\n", tmp->tm_mday); printf(" tm_mon = %d\n", tmp->tm_mon); printf(" tm_year = %d\n", tmp->tm_year); printf(" tm_wday = %d\n", tmp->tm_wday); printf(" tm_yday = %d\n", tmp->tm_yday); printf(" tm_isdst = %d\n", tmp->tm_isdst); } exit(EXIT_SUCCESS); } ZOBACZ TAKZE time(2), localtime(3), setlocale(3), strftime(3), strptime(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Andrzej Krzysztofowicz i Robert Luberda Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. getdate(3)