Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Moduły ciągów i czasu
Moduł daty i czasu
Cel
Dostosuj rejestry i ustaw daty wysyłki dla zapasów, korzystając z funkcji modułu Data i Czas.
Niższe piętro aneksu nowej strefy budowlanej to magazyn, w którym znajdują się niektóre z niedawno dostarczonych zapasów, które zostały zapakowane i są gotowe do wysyłki do okolic nowej budowy. Muszą być oznakowane właściwymi datami i godzinami, a także upewnić się, że wszelkie już nałożone etykiety zawierają wszystkie istotne informacje. Aby to zrobić, moglibyśmy poświęcić czas na ręczne zapisywanie i formatowanie dat i czasu, ale istnieje znacznie szybszy sposób, używając modułu daty i czasu.
Moduł daty i czasu importuje się przez zapisanie import datetime, co odblokowuje szereg potężnych funkcji umożliwiających odczytywanie i ustawianie sformatowanych dat i czasów, które można przechowywać w obiektach. Możesz również użyć: from datetime import timezone, timedelta, aby ustawić strefy czasowe. Poniższe funkcje są dostępne po zaimportowaniu modułu:
datetime.datetime(): Umożliwia ustawienie i przechowywanie wybranego czasu, przyjmuje kilka argumentów, takich jak:year,month,day,hour,minute,second,microsecond,timezone. Nie musisz podawać wszystkich argumentów, a jedynie te, których chcesz użyć.datetime.datetime.now(): Zwraca aktualną datę i czas, tak jakby wyglądał na zegarze.datetime.datetime.date(): Zwraca tylko datę, bez czasu.datetime.datetime.time(): Zwraca tylko czas, bez daty.datetime.datetime.timestamp(): Zwraca znacznik czasu (timestamp) datetime w formacie UNIX.timezone(): Umożliwia ustawienie strefy czasowej do wykorzystania z argumentami daty i czasu.datetime.strftime(): Pozwala na wydobycie określonych informacji o dacie i czasie oraz ich formatowanie według własnych upodobań, przy użyciu określonych kodów. Dla naszych celów użyjemy następujących kodów:"%a": Dzień tygodnia, skrócony"%d": Dzień miesiąca"%B": Nazwa miesiąca, pełna"%I": Godzina, w systemie dwunastogodzinnym"%M": Minuta"%p": Określenie AM/PM"%x": Lokalny format daty"%X": Lokalny format czasu"%j": Dzień roku"%U": Tydzień roku"%z": Strefa czasowa UTC
Na początek przejdź do lekkiego znaku X i zwróć się w stronę biurka, użyj funkcji read() aby sprawdzić daty pakowania przesyłek oraz daty rozpoczęcia i zakończenia projektów. Zwróć uwagę na daty rozpoczęcia i zakończenia podane w dokumencie (miesiąc/dzień/rok). Pierwsze trzy (3) punkty danych zapisane w notatce, jak również strefa czasowa, są wstępnie zapisane w edytorze kodu, aby ułatwić wykorzystanie w późniejszych funkcjach.
W tym samym miejscu stwórz zmienną o nazwie today i przypisz do niej wartość zwracaną przez datetime.datetime.now(). Użyj funkcji str(), aby przekonwertować tę wartość na ciąg znaków w czytelnym formacie, na przykład: today = str(datetime.datetime.now()). Użyj funkcji display(), aby zapisać dzisiejszą datę w notatce; w ten sposób data dla przydziałów wysyłkowych zostanie ustalona i będziesz mógł dodawać brakujące punkty danych w odpowiednich miejscach.
Przejdź do złotego znaku X obok biurka; tutaj obliczymy i zapiszemy liczbę dni, które zajmie realizacja tego projektu. W edytorze znajdują się dwie zmienne o nazwach start i end, które przechowują wartości datetime. Zapisz daty rozpoczęcia i zakończenia, które wcześniej odczytałeś, w wyznaczonych miejscach. Utwórz zmienną o nazwie result i przypisz do niej wynik odejmowania zmiennej start od end. Użyj funkcji str(), aby przekonwertować tę wartość na czytelny ciąg znaków, na przykład: result = str(end-start). Użyj funkcji write(), aby zapisać zmienną result i zanotować, jak długo to potrwa.
Stamtąd przejdź do złotego znaku X obok czerwonego dywanu i kieruj się w dół do znaków X obok skrzyń z czerwonym dywanem w lewej kolumnie. Tutaj dodamy konkretne elementy dat pakowania, których brakuje na skrzyniach, używając datetime(). W edytorze przypisana jest wstępnie data do zmiennej red_date; będziemy wydobywać różne fragmenty danych i używać ich do oznaczania skrzyń.
Dla czerwonych dywanów:
-
Na złotym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
red_days, w której przechowasz datę bez czasu, korzystając zdate()na zmiennejred_datei przekonwertujesz ją za pomocąstr(), na przykład:red_days = str(red_date.date()). Użyj funkcjiwrite(), aby oznakować skrzynie za pomocąred_days. -
Na lekkim znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
red_time, w której przechowasz czas bez daty, korzystając ztime()na zmiennejred_datei przekonwertujesz ją za pomocąstr(), na przykład:red_time = str(red_date.time()). Użyj funkcjiwrite(), aby oznakować skrzynie za pomocąred_time. -
Na ciemnym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
red_timestamp, w której przechowasz znacznik czasu obliczony na podstawie zmiennejred_date, na przykład:red_timestamp = red_date.timestamp(). Użyj funkcjiwrite(), aby oznakować skrzynie za pomocąred_timestamp.
Następnie przejdź do znaków X przed skrzyniami z niebieskim dywanem. Podobnie jak wcześniej, znajduje się seria trzech (3) kolorowych znaków X, tym razem odwołujących się do wstępnie zapisanej zmiennej blue_date, aby uzupełnić etykiety. Przejdź przez kolumnę i użyj funkcji strftime(), aby dodać brakujące elementy do etykiet wysyłkowych. W przeciwieństwie do poprzednich funkcji, w tej potrzeba specyficznego kodu, aby wydobyć i sformatować elementy docelowej daty. Na przykład, jeśli chcemy uzyskać dzień tygodnia dla zmiennej blue_date, użyjesz kodu "%a" z funkcją strftime(), tak jak to: blue_date.strftime("%a").
Dla znaków X obok skrzyń z niebieskim dywanem, użyj funkcji strftime() z odpowiednim kodem. Przejrzyj wcześniej wymienioną listę kodów w zależności od wymagań. Dla niebieskich dywanów:
-
Na złotym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
blue_weekday, w której zapisz dzień tygodnia, korzystając zstrftime()na zmiennejblue_date, na przykład:blue_day = blue_date.strftime("%a"). Utwórz kolejną zmienną o nazwieblue_dayi zapisz w niej dzień miesiąca, korzystając zstrftime()na zmiennejblue_date. Utwórz kolejną zmienną o nazwieblue_monthi zapisz w niej pełną nazwę miesiąca, korzystając zstrftime()na zmiennejblue_date. Wstaw zmienneblue_weekday,blue_dayiblue_monthdo wstępnie zapisanej funkcjiwrite(). -
Na lekkim znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
blue_hour, w której zapisz godzinę, w systemie dwunastogodzinnym, korzystając zstrftime()na zmiennejblue_date. Utwórz kolejną zmienną o nazwieblue_minutei zapisz w niej minutę, korzystając zstrftime()na zmiennejblue_date. Utwórz kolejną zmienną o nazwieblue_meridiani zapisz w niej oznaczenie AM/PM, korzystając zstrftime()na zmiennejblue_date. Wstaw zmienneblue_hour,blue_minuteiblue_meridiando wstępnie zapisanej funkcjiwrite(). -
Na ciemnym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
blue_local_date, w której zapisz lokalny format daty, korzystając zstrftime()na zmiennejblue_date. Utwórz kolejną zmienną o nazwieblue_local_timei zapisz w niej lokalny format czasu, korzystając zstrftime()na zmiennejblue_date. Wstaw zmienneblue_local_date,blue_local_timeorazblue_meridiando wstępnie zapisanej funkcjidisplay().
Na koniec przejdź do złotego znaku X obok zielonego dywanu i kieruj się w dół do znaków X obok skrzyń z zielonym dywanem w prawej kolumnie. Tutaj będziemy kontynuować dodawanie konkretnych elementów dat pakowania, których brakuje na skrzyniach, używając strftime(). W edytorze przypisana jest wstępnie data do zmiennej green_date; będziemy wydobywać różne fragmenty danych i używać ich do oznakowania skrzyń.
Dla zielonych dywanów:
-
Na złotym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
green_day, w której zapisz dzień roku, korzystając zstrftime()na zmiennejgreen_date. Użyj funkcjiwrite(), aby oznakować skrzynie za pomocągreen_day. -
Na lekkim znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
green_week, w której zapisz tydzień roku, korzystając zstrftime()na zmiennejgreen_date. Użyj funkcjiwrite(), aby oznakować skrzynie za pomocągreen_week. -
Na ciemnym znaku X, zwróć się w stronę skrzyń i utwórz zmienną o nazwie
green_timezone, w której zapisz strefę czasową UTC, korzystając zstrftime()na zmiennejgreen_date. Użyj funkcjiwrite(), aby oznakować skrzynie za pomocągreen_timezone.
Gdy wszystkie etykiety na znakach X obok kolorowych dywanów zostaną zanotowane, poziom zostanie ukończony.