Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам

Освоение модуля datetime в Python

Узнайте, как работать с датами и временем в Python через наглядные примеры и чёткие объяснения.

Видео: Python datetime — работа с датами и временем

Модуль datetime Python предоставляет мощные инструменты для манипуляции датами и временем. Ниже мы пройдёмся по распространённым задачам: от получения текущего момента до форматирования и работы с часовыми поясами.


Пример 1: Получение текущей даты и времени

import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)

Вывод будет похож на:

2018-12-19 09:26:03.478039

Здесь мы импортируем модуль с import datetime. Класс datetime содержит метод now(), возвращающий локальные дату и время.


Пример 2: Получение текущей даты

import datetime
date_object = datetime.date.today()
print(date_object)

Вывод:

2018-12-19

Мы используем today() из класса date для получения текущей календарной даты.


Исследование модуля datetime

Запустите dir(datetime) для списка всех атрибутов и классов:

import datetime
print(dir(datetime))

Вывод:

['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

Ключевые классы: date, time, datetime и timedelta.


Класс datetime.date

Класс date представляет календарную дату (год, месяц, день).


Пример 3: Создание объекта даты

import datetime
d = datetime.date(2019, 4, 13)
print(d)

Результат:

2019-04-13

Здесь date() — конструктор, принимающий year, month и day как аргументы.

Переменная a — экземпляр date.


Импорт только класса date:

from datetime import date
a = date(2019, 4, 13)
print(a)

Пример 4: Текущая дата

Используйте класс-метод today():

from datetime import date
today = date.today()
print("Current date =", today)

Пример 5: Из временной метки (timestamp)

Unix timestamp отсчитывает секунды с 1970-01-01 UTC. Конвертируйте с fromtimestamp():

from datetime import date
timestamp = date.fromtimestamp(1326244364)
print("Date =", timestamp)

Вывод:

Date = 2012-01-11

Пример 6: Доступ к году, месяцу, дню

from datetime import date
today = date.today()
print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)

Класс datetime.time

Класс time хранит время суток без даты.


Пример 7: Создание объектов времени

from datetime import time
a = time()
print("a =", a)
b = time(11, 34, 56)
print("b =", b)
c = time(hour=11, minute=34, second=56)
print("c =", c)
d = time(11, 34, 56, 234566)
print("d =", d)

Результат:

a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566

Пример 8: Инспекция компонентов времени

from datetime import time
a = time(11, 34, 56)
print("hour =", a.hour)
print("minute =", a.minute)
print("second =", a.second)
print("microsecond =", a.microsecond)

Вывод:

hour = 11
minute = 34
second = 56
microsecond = 0

Класс datetime.datetime

Класс datetime объединяет информацию о дате и времени.


Пример 9: Создание объекта datetime

from datetime import datetime
# год, месяц, день
A = datetime(2018, 11, 28)
print(A)
# полная спецификация
B = datetime(2017, 11, 28, 23, 55, 59, 342380)
print(B)

Результат:

2018-11-28 00:00:00
2017-11-28 23:55:59.342380

Год, месяц и день обязательны; час, минута, секунда и микросекунда по умолчанию нулевые.


Пример 10: Инспекция компонентов и timestamp

from datetime import datetime
A = datetime(2017, 11, 28, 23, 55, 59, 342380)
print("year =", A.year)
print("month =", A.month)
print("day =", A.day)
print("hour =", A.hour)
print("minute =", A.minute)
print("timestamp =", A.timestamp())

Вывод:

year = 2017
month = 11
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238

Класс datetime.timedelta

Объект timedelta представляет продолжительность между двумя датами или временами.


Пример 11: Разница между датами и временем

from datetime import datetime, date
T1 = date(year=2018, month=7, day=12)
T2 = date(year=2017, month=12, day=23)
T3 = T1 - T2
print("T3 =", T3)
T4 = datetime(year=2018, month=7, day=12, hour=7, minute=9, second=33)
T5 = datetime(year=2019, month=6, day=10, hour=5, minute=55, second=13)
T6 = T4 - T5
print("T6 =", T6)
print("type of T3 =", type(T3))
print("type of T6 =", type(T6))

Вывод:

T3 = 201 days, 0:00:00
T6 = -333 days, 1:14:20
type of T3 = <class 'datetime.timedelta'>
type of T6 = <class 'datetime.timedelta'>

Пример 12: Вычитание объектов timedelta

from datetime import timedelta
T1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
T2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
T3 = T1 - T2
print("T3 =", T3)

Вывод:

T3 = 14 days, 13:55:39

Пример 13: Отрицательный timedelta

from datetime import timedelta
T1 = timedelta(seconds=33)
T2 = timedelta(seconds=54)
T3 = T1 - T2
print("T3 =", T3)
print("abs(T3) =", abs(T3))

Вывод:

T3 = -1 day, 23:59:39
abs(T3) = 0:00:21

Пример 14: Общее количество секунд в timedelta

from datetime import timedelta
T = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("total seconds =", T.total_seconds())

Вывод:

total seconds = 435633.233423

Можно складывать даты, умножать timedelta на число и делить на float для масштабирования продолжительностей.


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

Разные локали используют различные форматы дат (например, mm/dd/yyyy в США против dd/mm/yyyy в UK). Методы Python strftime() и strptime() помогают конвертировать между объектами datetime и форматированными строками.


Python strftime() — datetime в строку

from datetime import datetime
now = datetime.now()
# Час:минута:секунда
T = now.strftime("%H:%M:%S")
print("time:", T)
# US формат
S1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("S1:", S1)
# UK формат
S2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("S2:", S2)

Типичный вывод:

time: 04:34:52
S1: 12/26/2018, 04:34:52
S2: 26/12/2018, 04:34:52

Частые коды формата: %Y год, %m месяц, %d день, %H час, %M минута, %S секунда.


Python strptime() — строка в datetime

from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)

Вывод:

date_string = 21 June, 2018
date_object = 2018-06-21 00:00:00

Здесь %d — день, %B — полное название месяца, %Y — год.


Осведомлённость о часовых поясах (Timezone Awareness)

Для приложений, которым нужно отображать или вычислять время в разных зонах, избегайте ручных расчётов и используйте библиотеку pytz.

from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
dt_NY = datetime.now(tz_NY)
print("NY:", dt_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_London = pytz.timezone('Europe/London')
dt_London = datetime.now(tz_London)
print("London:", dt_London.strftime("%m/%d/%Y, %H:%M:%S"))

Пример вывода:

Local: 12/20/2018, 13:10:44
NY: 12/20/2018, 08:10:44
London: 12/20/2018, 13:10:44

Объекты datetime_NY и datetime_London содержат timezone-aware временные метки.

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
  5. Словари в Python: создание, манипуляции и продвинутые техники
  6. Итераторы в Python: как они работают и как создать свои
  7. Замыкания в Python: как вложенные функции захватывают переменные
  8. Получение текущей даты и времени в Python: практическое руководство
  9. Python: получение текущего времени и работы с часовыми поясами
  10. Освоение Python time.sleep(): лучшие практики, многопоточность и реальные примеры