W tym artykule weźmiemy pod lupę jedną z metod modułu "time". "gmtime" w Pythonie zwraca zestaw wartości z których się składa nasz obecny czas systemowy. Jesteście ciekawi jak Python może dowiedzieć się o aktualnym czasie? Siądźcie wygodnie i przeczytajcie ten wpis, a się dowiecie. On nie jest skandalicznie długi.

ZASTOSOWANIE "GMTIME" W PYTHONIE

Nie robiłbym zagadnienia z jednej metody tylko po to, aby wytłumaczyć jej zastosowanie w praktyce. Krótko i zwięźle: zwrot zestawu wartości z paroma argumentami z których składa się aktualny czas pobrany z zegarka systemowego. Ten zestaw wartości do złudzenia przypomina listę. Lista jest jednym z typów kolekcji przeznaczonych do przechowywania wielu wartości w jednym miejscu (możecie napotkać też pojęcie "tablica", ale w języku Python jest rzadko wykorzystywane).

Ciekawy jest sam system obliczania czasu. Pochodzi on z obliczenia upłyniętych sekund od 1 stycznia, 1970 roku (tak zwany "czas uniksowy"). Dlaczego akurat taka data? Ponieważ pierwszy system operacyjny w historii, Unix, został napisany pod koniec 1969 roku.

WYKORZYSTYWANIE

"gmtime" w Pythonie należy do modułu "time". Importujemy go:

import time

Od tej pory, metoda stoi otworem. Po jej wywołaniu w powłoce, ujrzymy mniej więcej coś takiego na wyjściu (różnice mogą wystąpić w zależności od tego, jaki jest teraz czas systemowy):

Metoda "gmtime" w Pythonie

Wynik działania metody "gmtime" w Pythonie.

Widzimy wyraźnie, że metoda zwraca zestaw wartości, a nie jedną wartość. Nie tylko zobaczymy jaka jest data i aktualny czas, ale także szereg innych czynników. Świadczą o tym wartości oddzielone przecinkami otoczone parą nawiasów okrągłych. Możemy jednak bez przeszkód wydobyć którąkolwiek z tych wartości korzystając z notacji indeksowej w taki sposób:

seconds = time.gmtime()[5]

Nie ma przeciwskazań także do podstawienia sobie tego obiektu do zmiennej, a później z samej zmiennej wyciągać liczby.

NIE TYLKO GODZINA, MINUTA I SEKUNDA

Popatrzmy na argumenty jakie w sobie posiada zwracany zestaw wartości. Jest ich dziewięć sztuk:

  1. tm_year
    • rok
    • przyjmuje liczbę całkowitą
  2. tm_mon
    • miesiąc
    • przyjmuje liczbę całkowitą w zakresie od 1 do 12
  3. tm_mday
    • dzień miesiąca
    • przyjmuje liczbę całkowitą w zakresie od 1 do 31 ("gmtime" w Pythonie potrafi zidentyfikować liczbę dni jeśli dany miesiąc ma mniej niż 31 dni)
  4. tm_hour
    • godzina
    • pobiera aktualną godzinę o jeden do tyłu (czyli jak na zegarze jest południe, to argument przyjmie wartość 11 - prawdopodobnie działa tutaj operacja modulo)
    • przyjmuje liczbę całkowitą w zakresie od 0 do 23
  5. tm_min
    • minuta
    • przyjmuje liczbę całkowitą w zakresie od 1 do 59
  6. tm_sec
    • sekunda
    • przyjmuje liczbę całkowitą w zakresie od 1 do 61 (budzący zdziwienie limit wynika z sekundy przestępnej jaki zachodził w interfejsie o nazwie "POSIX")
  7. tm_wday
    • dzień tygodnia
    • tu występuje takie samo odjęcie wartości o jeden, co powyżej!
    • przyjmuje liczbę całkowitą w zakresie od 0 do 6
  8. tm_yday
    • dzień roku (suma upłyniętych miesięcy + upłynięte dni w aktualnym miesiącu)
    • przyjmuje liczbę całkowitą w zakresie od 1 do 366
  9. tm_isdst
    • czas letni
    • zwraca 1, gdy ma wpływ na czas
    • zwraca 0, gdy nie ma wpływu na czas
    • zwraca -1, gdy nie jest wiadome czy ma wpływ na czas

TYP "STRUCT_TIME"

Na koniec, parę słów o typie danych zwracanego obiektu. "gmtime" w Pythonie nie zwraca de facto listy, tylko typ noszący nazwę "struct_time". Gdyby zajrzeć do dokumentacji Pythona, to dostrzeżecie wzmianki na temat "interfejsu nazwanej krotki". Krotka stanowi kontener wartości, których raz ustalonej struktury nie da się zmienić przez całe działanie programu (działa jak "constant").

Kolejną rzeczą jest rozwianie czegoś, co może w tej chwili przychodzić do głowy. W Pythonie nie ma żadnych struktur tak jak w języku C, choć nazwa istotnie pochodzi od języka w którym został napisany Python. A dokładniej, z pliku nagłówkowego "time.h". Schodząc w głąb pliku, możecie zobaczyć taki fragment kodu:

Struktura "tm" w pliku nagłówkowym "time" w języku C

Znaleziona struktura ze zmiennymi w pliku nagłówkowym "time.h" powiązana z "gmtime".

Czy nie jest on łudząco podobny do powyższego odpowiednika? Jest! Jedyną różnicą jest inna kolejność wartości, ale reszta się zgadza. Czyli podsumowując, struktura "struct_time" pochodzi z języka C, ale sama nazwa została już samodzielnie nadana tej strukturze. Nie ma jednak żadnego "struct" w całym Pythonie jako słowa kluczowego!


Na tym zakończymy sobie analizę metody "gmtime" w Pythonie. Nie tylko dowiedzieliście się do czego to służy i jak wygląda, ale także jak wiele pokazuje związków z językiem C oraz historią pierwszego systemu operacyjnego. A jeśli jesteście ciekawi w jaki sposób mierzyć czas działania programu, sięgnijcie tutaj.

PODOBNE ARTYKUŁY