Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

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

SKŁADNIA

       #include <time.h>

       struct tm *getdate(const char *string);

       extern int getdate_err;

       #include <time.h>

       int getdate_r(const char *string, struct tm *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-Unsafe race:getdate env locale │
       ├────────────┼────────────────────────┼───────────────────────────────────┤
       │getdate_r() │ Bezpieczeństwo wątkowe │ MT-Safe env locale                │
       └────────────┴────────────────────────┴───────────────────────────────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008.

UWAGI

       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ń.

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      # Data w postaci ISO (RRRR-MM-DD)
           $ echo '%F' >> $TFILE      # Czas (HH:MM:SS)
           $ 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") zakończone pomyślnie:
               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") zakończone pomyślnie:
               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") zakończone pomyślni:
               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 <time.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           struct tm *tmp;

           for (int j = 1; j < argc; j++) {
               tmp = getdate(argv[j]);

               if (tmp == NULL) {
                   printf("Wywołanie %d zakończone błędem; getdate_err = %d\n",
                          j, getdate_err);
                   continue;
               }

               printf("Wywołanie %d (\"%s\") zakończone pomyślnie:\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)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  5.10  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

T◈UMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Andrzej  Krzysztofowicz
       <ankry@green.mf.pg.gda.pl> i Robert Luberda <robert@debian.org>

       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⟩.

                                       1 listopada 2020 r.                             GETDATE(3)