plucky (3) getdate_r.3.gz

Provided by: manpages-pl-dev_4.25.1-1_all bug

NAZWA

       getdate, getdate_r - dzieli tekstową datę z czasem na osobne pola

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <time.h>

       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()  przekształca  tekstową  reprezentację daty i czasu, przekazaną w buforze  wskazywanym
       przez string, na osobne pola zawierające  rozłożony  czas.  Ten  rozłożony  czas  jest   przechowywany  w
       strukturze  tm,  do  której  wskaźnik  jest  zwracany  jako wynik funkcji. Zwracana struktura tm może się
       znajdować w pamięci statycznej, wobec czego zostanie nadpisana przez kolejne wywołania funkcji getdate().

       W odróżnieniu od strptime(3)  (która  przyjmuje  argument  format),  getdate()  posługuje  się  formatami
       znajdującymi  się  w  pliku,  do  którego  pełna ścieżka jest podana w zmiennej środowiskowej DATEMSK. Do
       konwersji stosowana jest pierwsza z linii pliku, która pasuje do zadanego łańcucha.

       Podczas dopasowywania ignorowana jest wielkość liter.  Ignorowane  są  również  nadmiarowe  białe  znaki,
       zarówno we wzorcu, jak i w przekształcanym łańcuchu.

       Specyfikacje  przekształceń,  które  mogą być zawarte we wzorcu są takie same, jak dla strptime(3). Jedna
       dodatkowa specyfikacja przekształcenia jest opisana w standardzie POSIX.1-2001:

       %Z     Nazwa strefy czasowej. Glibc tego nie implementuje.

       Gdy podano %Z, to struktura  zawierająca  rozłożony  czas  jest  inicjowana  wartościami  odpowiadającymi
       bieżącemu czasowi w podanej strefie czasowej. W przeciwnym przypadku, jest inicjowana jako rozłożony czas
       odpowiadający bieżącemu czasowi lokalnemu (tak jak w przypadku wywołania funkcji localtime(3)).

       Gdy podany jest tylko dzień tygodnia, brany jest pierwszy taki dzień przypadający  w  dniu  bieżącym  lub
       później.

       Gdy  podany  jest  jedynie  miesiąc  (bez roku), brany jest pierwszy taki miesiąc przypadający w miesiącu
       bieżącym lub po nim. Gdy nie podano dnia, brany jest pierwszy dzień miesiąca.

       Gdy nie podano godziny, minuty ani sekundy, brana jest bieżąca godzina, minuta i sekunda.

       Gdy nie podano daty, ale znana jest godzina, brana jest pierwsza taka  godzina  przypadająca  w  bieżącej
       godzinie lub później.

       getdate_r()  jest rozszerzeniem GNU. Jest to bezpieczna dla wątków wersja getdate(), która zamiast używać
       globalnej zmiennej do raportowania błędów oraz statycznego bufora na rozłożony czas,  zwraca  błędy  jako
       wynik  funkcji  oraz zwraca rozłożony czas w zaalokowanej przez funkcję wywołującą strukturze wskazywanej
       przez argument res.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu getdate() zwraca wskaźnik do struktury struct tm.   W  przeciwnym  razie  zwraca
       NULL  i ustawia zmienną globalną getdate_err na jeden z poniżej podanych numerów błędów. Zmiany errno nie
       są określone.

       W przypadku powodzenia getdate_r() zwraca zero. W przeciwnym wypadku  zwraca  jeden  z  poniżej  podanych
       numerów błędów.

BŁĘDY

       Poniższe  błędy  są zwracane albo poprzez getdate_err (w przypadku getdate()), albo jako wynik funkcji (w
       przypadku getdate_r()):

       1   Zmienna środowiska DATEMSK nie jest zdefiniowana lub ma pustą wartość.

       2   Nie udało się otworzyć pliku wzorców określonego przez DATEMSK w trybie do odczytu.

       3   Nie udało się pobrać informacji o stanie.

       4   Plik wzorców nie jest zwykłym plikiem.

       5   Wystąpił błąd podczas odczytu pliku wzorców.

       6   Nie udało się przydzielić pamięci (brak dostępnej pamięci).

       7   Brak w pliku linii pasującej do podanych danych.

       8   Niewłaściwa specyfikacja wejściowa.

ŚRODOWISKO

       DATEMSK
              Plik zawierający wzorce formatów.

       TZ
       LC_TIME
              Zmienne używane przez strptime(3).

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌────────────┬────────────────────────┬──────────────────────────────────────────────────────────────────┐
       │InterfejsAtrybutWartość                                                          │
       ├────────────┼────────────────────────┼──────────────────────────────────────────────────────────────────┤
       │getdate()   │ Bezpieczeństwo wątkowe │ MT-niebezpieczne race:getdate env locale                         │
       ├────────────┼────────────────────────┼──────────────────────────────────────────────────────────────────┤
       │getdate_r() │ Bezpieczeństwo wątkowe │ MT-bezpieczne env locale                                         │
       └────────────┴────────────────────────┴──────────────────────────────────────────────────────────────────┘

WERSJE

       Standard POSIX.1 dla strptime(3) zawiera specyfikacje przekształceń korzystające z modyfikatorów  %E  lub
       %O,  podczas  gdy  takie  specyfikacje  nie zostały podane dla getdate(). Implementacja w glibc realizuje
       getdate() za  pomocą  strptime(3),  więc  automatycznie  obie  funkcje  wspierają  te  same  specyfikacje
       przekształceń.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001.

PRZYKŁADY

       Poniższy  program  wywołuje getdate() dla każdego z argumentów linii poleceń i po każdym takim  wywołaniu
       wyświetla wartości pól zwróconej struktury tm. Następująca sesja powłoki obrazuje działanie programu:

           $ TFILE=$PWD/tfile
           $ echo '%A' > $TFILE       # Pełna nazwa dnia tygodnia
           $ echo '%T' >> $TFILE      # Czas (GG:MM:SS)
           $ echo '%F' >> $TFILE      # Data ISO (RRRR-MM-DD)
           $ date
           $ export DATEMSK=$TFILE
           $ ./a.out Tuesday '2009-12-28' '12:22:33'
           Sun Sep  7 06:03:36 CEST 2008
           Wywołanie 1 ("Tuesday") powiodło się:
               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
           Wywołanie 2 ("2009-12-28") powiodło się:
               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
           Wywołanie 3 ("12:22:33") powiodło się:
               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 źródłowy programu

       #define _GNU_SOURCE
       #include <stdio.h>
       #include <stdlib.h>
       #include <time.h>

       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("Wywołanie %zu nie powiodło się; getdate_err = %d\n",
                          j, getdate_err);
                   continue;
               }

               printf("Wywołanie %zu (\"%s\") powiodło się:\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 TAKŻE

       time(2), localtime(3), setlocale(3), strftime(3), strptime(3)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony   podręcznika   są:    Andrzej    Krzysztofowicz
       <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając się z GNU General Public License w wersji  3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy dyskusyjnej ⟨manpages-pl-
       list@lists.sourceforge.net⟩.