Поглиблений курс розробки на Python
Розділ
>
Рівень
Модулі рядків та часу
Модуль дати/часу
Мета
Відкоригуйте записи та встановіть дати відправлення постачань за допомогою функцій модуля Date & Time.
Нижній поверх анексу в новій будівельній зоні — це склад, де зберігаються деякі з нещодавно доставлених постачань, які вже упаковані та готові до відправлення у райони навколо нової будівлі. Їх потрібно маркувати з правильними датами та часом, а також переконатися, що всі вже наклеєні етикетки містять всю необхідну інформацію. Для цього можна було б витратити час на ручне написання та форматування дат і часу, але існує набагато швидший спосіб зробити це за допомогою модуля date and time.
Модуль date and time імпортується наступним рядком: import datetime. Це відкриває доступ до ряду потужних функцій, які дозволяють зчитувати та встановлювати відформатовані час та дату, які можна зберігати в об’єктах. Ви також можете використовувати: from datetime import timezone, timedelta для встановлення часових зон. Наступні функції стають доступними після імпорту модуля:
datetime.datetime(): Дозволяє встановити та зберегти бажаний час, приймає кілька аргументів:year,month,day,hour,minute,second,microsecond,timezone. Вам не обов’язково вводити всі аргументи, а лише ті, які ви бажаєте використовувати.datetime.datetime.now(): Повертає поточну дату та час, як це відображається на годиннику.datetime.datetime.date(): Повертає лише дату з datetime, без часу.datetime.datetime.time(): Повертає лише час з datetime, без дати.datetime.datetime.timestamp(): Повертає часову мітку datetime у вигляді коду UNIX.timezone(): Дозволяє встановити часову зону для використання з аргументами дати та часу.datetime.strftime(): Дозволяє витягувати певну інформацію з дати та часу і форматувати її за вашим бажанням, використовуючи певні коди. Для наших потреб ми будемо використовувати наступні коди:"%a": День тижня, скорочено"%d": День місяця"%B": Назва місяця, повністю написана"%I": Година, 12-годинний формат"%M": Хвилина"%p": Позаопівденно/доопівдня (AM/PM)"%x": Локальний формат дати"%X": Локальний формат часу"%j": День року"%U": Тиждень року"%z": Часова зона UTC
Щоб почати, перейдіть до позначки світлого X і поверніться до столу. Використовуйте функцію read(), щоб перевірити дати пакування для відправлень, а також дати початку та завершення проектів. Зверніть увагу на дати початку та завершення, зазначені в документі (місць/день/рік). Перші три (3) точки даних, записані у нотатці, а також часова зона, попередньо записані в редакторі коду для зручності використання в подальших функціях.
У цьому ж просторі створіть змінну з назвою today і збережіть у ній значення, яке повертає datetime.datetime.now(). Використовуйте str(), щоб перетворити значення на рядок, щоб його було легко прочитати, ось так: today = str(datetime.datetime.now()). Використовуйте функцію display(), щоб записати на нотатці сьогоднішню дату, таким чином встановлюється дата для відправлень, і ви можете почати додавати відсутні дані у необхідні місця.
Перейдіть до позначки золотого X поруч зі столом, і тут ми будемо розраховувати та записувати кількість днів, які займе цей проект. У редакторі записано дві змінні з іменами start та end, які зберігають datetime. Запишіть дати початку та завершення, які ви раніше зчитали, у надані простори. Створіть змінну з назвою result і збережіть у ній результат віднімання змінної start від end. Використовуйте функцію str(), щоб перетворити значення на читабельний рядок, ось так: result = str(end-start). Використовуйте функцію write(), щоб записати змінну result та відзначити, скільки це займе часу.
Далі ми перейдемо до позначки золотого X поруч з червоною килимовою дорогою і будемо переміщуватись до позначок X поруч з ящиками на червоній килимовій доріжці у лівій колонці. Тут ми додамо відсутні частини дат пакування, використовуючи datetime(). У редакторі буде попередньо записана дата, присвоєна змінній red_date, з якої ми витягнемо різні частини даних та використаємо їх для маркування ящиків.
Для червоних килимів:
-
На позначці золотого X, звернувшись до ящиків, створіть змінну з назвою
red_days, збережіть у ній дату без часу, використовуючиdate()зі змінноїred_dateі перетворіть її за допомогоюstr(), ось так:red_days = str(red_date.date()). Використовуйте функціюwrite(), щоб маркувати ящики, використовуючиred_days. -
На позначці світлого X, звернувшись до ящиків, створіть змінну з назвою
red_time, збережіть у ній час без дати, використовуючиtime()зі змінноїred_dateі перетворіть її за допомогоюstr(), ось так:red_time = str(red_date.time()). Використовуйте функціюwrite(), щоб маркувати ящики, використовуючиred_time. -
На позначці темного X, звернувшись до ящиків, створіть змінну з назвою
red_timestamp, збережіть у ній часову мітку, розраховану зі змінноїred_date, ось так:red_timestamp = red_date.timestamp(). Використовуйте функціюwrite(), щоб маркувати ящики, використовуючиred_timestamp.
Після цього переходимо до позначок X перед ящиками на синьому килимі. Як і раніше, тут є серія з трьох (3) кольорових позначок, у цьому випадку використовуючи попередньо записану змінну blue_date для завершення маркування. Перейдіть через колонку та використовуйте функцію strftime(), щоб додати відсутні елементи на етикетки для відправлення. На відміну від попередніх функцій, ця вимагає специфічного коду для витягування та форматування елементів цільової дати. Наприклад, якщо ми хочемо отримати день тижня для змінної blue_date, ви використаєте код "%a" разом з функцією strftime(), ось так: blue_date.strftime("%a").
Для позначок X поруч із ящиками на синьому килимі використовуйте функцію strftime() із відповідним кодом. Перегляньте попередньо наведений список кодів залежно від вимог. Для синього килима:
-
На позначці золотого X, звернувшись до ящиків, створіть змінну з назвою
blue_weekdayі збережіть у ній день тижня, використовуючиstrftime()зі змінноїblue_date, ось так:blue_day = blue_date.strftime("%a"). Створіть іншу змінну з назвоюblue_dayі збережіть у ній день місяця, використовуючиstrftime()зі змінноїblue_date. Створіть ще одну змінну з назвоюblue_monthі збережіть у ній назву місяця, повністю написану, використовуючиstrftime()зі змінноїblue_date. Вставте змінніblue_weekday,blue_dayтаblue_monthу попередньо записану функціюwrite(). -
На позначці світлого X, звернувшись до ящиків, створіть змінну з назвою
blue_hourі збережіть у ній годину, 12-годинний формат, використовуючиstrftime()зі змінноїblue_date. Створіть іншу змінну з назвоюblue_minuteі збережіть у ній хвилину, використовуючиstrftime()зі змінноїblue_date. Створіть ще одну змінну з назвоюblue_meridianі збережіть у ній AM/PM, використовуючиstrftime()зі змінноїblue_date. Вставте змінніblue_hour,blue_minuteтаblue_meridianу попередньо записану функціюwrite(). -
На позначці темного X, звернувшись до ящиків, створіть змінну з назвою
blue_local_dateі збережіть у ній локальний формат дати, використовуючиstrftime()зі змінноїblue_date. Створіть іншу змінну з назвоюblue_local_timeі збережіть у ній локальний формат часу, використовуючиstrftime()зі змінноїblue_date. Вставте змінніblue_local_date,blue_local_timeтаblue_meridianу попередньо записану функціюdisplay().
Нарешті, переходимо до позначки золотого X поруч із зеленою килимовою дорогою і переміщуємось до позначок X поруч із ящиками на зеленому килимі у правій колонці. Тут ми продовжимо додавати відсутні частини дат пакування, використовуючи strftime(). У редакторі буде попередньо записана дата, присвоєна змінній green_date, з якої ми витягнемо різні частини даних та використаємо їх для маркування ящиків.
Для зелених килимів:
-
На позначці золотого X, звернувшись до ящиків, створіть змінну з назвою
green_dayі збережіть у ній день року, використовуючиstrftime()зі змінноїgreen_date. Використовуйте функціюwrite(), щоб маркувати ящики за допомогоюgreen_day. -
На позначці світлого X, звернувшись до ящиків, створіть змінну з назвою
green_weekі збережіть у ній тиждень року, використовуючиstrftime()зі змінноїgreen_date. Використовуйте функціюwrite(), щоб маркувати ящики за допомогоюgreen_week. -
На позначці темного X, звернувшись до ящиків, створіть змінну з назвою
green_timezoneі збережіть у ній часову зону UTC, використовуючиstrftime()зі змінноїgreen_date. Використовуйте функціюwrite(), щоб маркувати ящики за допомогоюgreen_timezone.
Після того, як всі етикетки на позначках X поруч із різнокольоровими килимами будуть записані, рівень буде завершено.