Даты и Время

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Модуль datetime в Python предоставляет ряд классов для манипуляции датами и временем. В этом практическом занятии мы исследуем некоторые из наиболее часто используемых классов и функций этого модуля и узнаем, как ими пользоваться для выполнения различных задач, таких как работа с датами, временем и разницами между временами.

Достижения

  • Модуль datetime
Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 100% положительных отзывов от учащихся.

Импорт модуля datetime

Для начала работы с модулем datetime нам необходимо его импортировать.

Откройте новую сессию интерпретатора Python:

python3

Это можно сделать с помощью следующей строки кода:

import datetime

Работа с датами

Модуль datetime предоставляет класс date для работы с датами. Чтобы создать объект даты, представляющий определенную дату, мы можем использовать конструктор date(), который принимает три аргумента: год, месяц и день. Например:

d = datetime.date(2021, 12, 31)
print(d)

Это создаст объект даты, представляющий 31 декабря 2021 года, и выведет его в формате "YYYY-MM-DD".

Работа с временем

Кроме дат, модуль datetime также предоставляет класс time для работы с временем. Чтобы создать объект времени, представляющий определенное время, мы можем использовать конструктор time(), который принимает три аргумента: час, минута и секунда. Например:

t = datetime.time(12, 30, 15)
print(t)

Это создаст объект времени, представляющий 12:30:15 (двенадцать часов тридцать минут пятнадцать секунд) дня, и выведет его в формате "HH:MM:SS".

Объединение дат и времени

Для работы с датой и временем одновременно мы можем использовать класс datetime, который объединяет дату и время. Чтобы создать объект datetime, представляющий определенную дату и время, мы можем использовать конструктор datetime(), который принимает шесть аргументов: год, месяц, день, час, минута и секунда. Например:

dt = datetime.datetime(2021, 12, 31, 12, 30, 15)
print(dt)

Это создаст объект datetime, представляющий 31 декабря 2021 года в 12:30:15 (двенадцать часов тридцать минут пятнадцать секунд) дня, и выведет его в формате "YYYY-MM-DD HH:MM:SS".

Работа с временными интервалами (timedelta)

Кроме работы с конкретными датами и временем, модуль datetime также предоставляет класс timedelta для работы с длительностями времени. Объект timedelta представляет длительность времени и может быть добавлен или вычтен из объекта datetime, чтобы получить новый объект datetime. Например:

d1 = datetime.date(2021, 12, 31)
d2 = d1 + datetime.timedelta(days=1)
print(d2)

Это создаст объект timedelta, представляющий один день, добавит его к объекту date d1 и получит новый объект date, представляющий 1 января 2022 года, и выведет его в формате "YYYY-MM-DD".

Форматирование дат и времени

Модуль datetime предоставляет метод strftime(), который можно использовать для форматирования объекта datetime в виде строки. Этот метод принимает строку формата в качестве аргумента, которая задает желаемый формат выходной строки. Например, следующий код форматирует объект datetime в виде строки в формате "YYYY-MM-DD HH:MM:SS":

dt = datetime.datetime(2021, 12, 31, 12, 30, 15)
s = dt.strftime('%Y-%m-%d %H:%M:%S')
print(s)

Он выведет "2021-12-31 12:30:15"

Парсинг дат и времени из строк

Модуль datetime также предоставляет класс-метод strptime(), который можно использовать для разбора строки и создания объекта datetime. Этот метод принимает два аргумента: строку для разбора и строку формата, которая задает ожидаемый формат входной строки. Например, следующий код разбирает строку в формате "YYYY-MM-DD HH:MM:SS" и создает объект datetime:

s = '2021-12-31 12:30:15'
dt = datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S')
print(dt)

Он выведет "2021-12-31 12:30:15"

Строка формата - это строка символов, соответствующих различным частям даты и времени, таким как год, месяц, день, час, минута и секунда.

Вот некоторые из наиболее часто используемых символов в строке формата:

  • %Y: год с веком в виде десятичного числа. Например, "2022"
  • %m: месяц в виде десятичного числа с ведущими нулями. Например, "01" для января, "12" для декабря
  • %d: день месяца в виде десятичного числа с ведущими нулями. Например, "01" для первого дня месяца, "31" для последнего дня месяца
  • %H: час (по 24-часовому формату) в виде десятичного числа с ведущими нулями. Например, "00" для полуночи, "12" для полудня, "23" для 11 вечера
  • %M: минута в виде десятичного числа с ведущими нулями. Например, "00" для начала часа, "30" для половины часа
  • %S: секунда в виде десятичного числа с ведущими нулями. Например, "00" для начала минуты, "59" для конца минуты

Кроме этих символов, строка формата может также включать литеральные символы, которые будут сопоставляться с входной строкой. Например, следующая строка формата будет соответствовать дате в формате "YYYY-MM-DD":

fmt = '%Y-%m-%d'

Метод strptime() затем будет использовать эту строку формата для разбора входной строки и извлекать из нее год, месяц и день.

Важно отметить, что строка формата должна точно соответствовать входной строке, в противном случае будет возбуждено исключение. Если вы не уверены в формате входной строки, вы можете использовать инструкции try и except для обработки любых потенциальных исключений, которые могут быть возбуждены.

Также метод strptime() не широко рекомендуется из-за некоторых проблем, таких как то, что он не является потоко-безопасным и медленный. Рекомендуется использовать функцию dateutil.parser.parse(), которая более гибкая и эффективная.

Работа с временными зонами

Модуль datetime также предоставляет библиотеку pytz, которая может быть использована для работы с временными зонами. Чтобы использовать ее, вам нужно сначала установить ее, выполнив pip install pytz в командной строке.

После установки вы можете использовать функцию pytz.timezone для создания объекта временной зоны для определенной временной зоны, например:

from datetime import datetime
import pytz

dt = datetime.now(pytz.timezone('US/Pacific'))
print(dt)

Это создаст объект datetime с текущей датой и временем в временной зоне Тихоокеанского времени (США), и выведет его в формате "YYYY-MM-DD HH:MM:SS-TZ".

Резюме

В этом практическом занятии мы изучили некоторые из наиболее часто используемых классов и функций из модуля Python datetime и узнали, как их использовать для выполнения различных задач, таких как работа с датами, временем и временными интервалами (timedelta). Мы увидели, как создавать объекты даты, времени и datetime с использованием соответствующих конструкторов, и как комбинировать их, чтобы представлять конкретные моменты времени. Мы также узнали о классе timedelta, который можно использовать для представления длительностей времени, и о том, как использовать его для выполнения арифметических операций над объектами datetime.

Кроме примеров, приведенных в этом практическом занятии, модуль datetime также предоставляет ряд других функций и классов для работы с временными зонами, форматирования дат и времени и разбора дат и времени из строк. Это мощный и универсальный модуль, который можно использовать для решения широкого спектра задач, связанных с временем, в Python.

В этом практическом занятии мы изучили некоторые из продвинутых функций модуля Python datetime, включая преобразование формата даты и времени и преобразование временных зон. Мы узнали, как использовать методы strftime() и strptime() для форматирования и разбора дат и времени в виде строк, и как использовать библиотеку pytz для работы с временными зонами. С этими инструментами вы должны быть в состоянии эффективно работать с датами и временем в Python и решать широкий спектр задач, связанных с временем.