os.time i os.date
Pobierze Pan/Pani bieżący czas.
os.time i os.date to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Dlaczego czas ma znaczenie
Programy często muszą znać bieżący czas. Gra zapisuje moment zdobycia wyniku, plik dziennika oznacza czas każdego zdarzenia, a aplikacja przypominająca odlicza czas do terminu.
Lua udostępnia narzędzia do pracy z czasem we wbudowanej bibliotece os. Dwiema najważniejszymi funkcjami są os.time i os.date. W tej lekcji zostaną przedstawione obie.
os.time zwraca liczbę
os.time() wywołane bez argumentów zwraca bieżący moment jako pojedynczą liczbę.
Liczba ta oznacza liczbę sekund, które upłynęły od ustalonego punktu w przeszłości, czyli epoki. Jest zwykłą liczbą całkowitą, więc można ją przechowywać, porównywać i wykonywać na niej obliczenia.
local now = os.time()
print(now)
print(type(now))Epoka
W większości systemów epoką jest północ 1 stycznia 1970 roku w czasie UTC. Dlatego os.time() informuje, ile sekund upłynęło od tego momentu.
Duża liczba, taka jak 1700000000, jest czymś normalnym. Zwiększa się o jeden co sekundę, dzięki czemu doskonale nadaje się do porównywania dwóch momentów.
local seconds = os.time()
print("Seconds since 1970:", seconds)os.date zwraca tekst
Surowa liczba sekund jest trudna do odczytania. os.date() przekształca czas w tekst czytelny dla człowieka.
Wywołana bez argumentów zwraca czytelny łańcuch opisujący bieżącą datę i godzinę, zgodnie z lokalnymi ustawieniami systemu.
print(os.date())os.date z formatem
Zwykle należy przekazać funkcji os.date łańcuch formatu. Specjalne kody zaczynające się od % są zastępowane odpowiednimi częściami daty.
%Y oznacza rok zapisany za pomocą 4 cyfr, %m miesiąc, a %d dzień. Pozostały tekst pozostaje bez zmian.
print(os.date("Year: %Y"))
print(os.date("%Y-%m-%d"))Łączenie czasu i daty
os.date może przyjąć drugi argument: liczbę reprezentującą czas. Należy przekazać mu wynik działania os.time, aby sformatować dokładnie ten moment.
Bez drugiego argumentu funkcja używa bieżącego czasu, więc te dwa wywołania opisują tę samą chwilę.
local t = os.time()
print(os.date("%Y-%m-%d", t))Czas lokalny a UTC
Domyślnie os.date używa lokalnej strefy czasowej. Aby uzyskać czas UTC zamiast czasu lokalnego, należy rozpocząć łańcuch formatu od wykrzyknika !.
Ma to znaczenie w przypadku serwerów i aplikacji używanych na całym świecie, gdzie wszyscy powinni korzystać z jednego zegara.
print("Local:", os.date("%H:%M"))
print("UTC: ", os.date("!%H:%M"))Forma tabeli
Jeśli jako format zostanie przekazane "*t", os.date zwróci tabelę zamiast łańcucha znaków.
Tabela zawiera nazwane pola, takie jak year, month, day, hour, min i sec. Jest to przydatne, gdy potrzebny jest tylko jeden z tych elementów.
local d = os.date("*t")
print(d.year, d.month, d.day)
print(d.hour, d.min, d.sec)Odczytywanie jednego pola
Ponieważ forma tabeli udostępnia nazwane pola, pobranie tylko bieżącego miesiąca lub tylko bieżącej godziny jest łatwe.
Dla wersji UTC tabeli należy użyć !*t. Każde pole jest zwykłą liczbą, której można używać w warunkach.
local d = os.date("*t")
if d.hour < 12 then
print("Good morning")
else
print("Good afternoon")
endos.time na podstawie tabeli
os.time działa również odwrotnie. Należy przekazać mu tabelę zawierającą year, month i day, a zwróci liczbę sekund odpowiadającą tej dacie.
Umożliwia to utworzenie wartości czasu dla dowolnej wybranej daty kalendarzowej.
local t = os.time({year=2020, month=1, day=1, hour=0})
print(t)
print(os.date("%Y-%m-%d", t))Konwersja w obie strony
Można swobodnie przechodzić między obiema postaciami: os.time przekształca tabelę w liczbę, a os.date("*t", n) przekształca liczbę z powrotem w tabelę.
Taka konwersja w obie strony stanowi podstawę obliczeń na datach, które zostaną omówione w późniejszych lekcjach.
local n = os.time({year=2021, month=6, day=15})
local back = os.date("*t", n)
print(back.year, back.month, back.day)Szybkie sprawdzenie
Proszę sprawdzić zrozumienie dwóch głównych funkcji.
Podsumowanie
os.time() podaje bieżący moment jako liczbę sekund od epoki. os.date() przekształca czas w tekst z użyciem kodów formatu % albo w tabelę za pomocą "*t".
Dodanie ! pozwala uzyskać czas UTC, a przekazanie liczby czasu jako drugiego argumentu umożliwia sformatowanie konkretnego momentu. Razem funkcje te obsługują niemal wszystkie potrzeby związane z datami w Lua.
Często zadawane pytania
Czy lekcja „os.time i os.date” jest bezpłatna?
Tak — pełny tekst „os.time i os.date” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „os.time i os.date”?
Pobierze Pan/Pani bieżący czas. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „os.time i os.date”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- os.time i os.date
- Formatowanie dat
- Operacje na czasie
- Mierzenie czasu trwania