Python має модуль datetime для роботи з датою та часом.
Отримання поточної дати та часу в Python
Для отримання поточної дати та часу використовується метод now(). Наприклад:
|
1 2 3 4 5 6 |
import datetime # Отримуємо поточну дату та час now = datetime.datetime.now() print(now) |
Результат:
2022-12-27 08:26:49.219717
Тут ми імпортували модуль datetime за допомогою стейтменту import datetime.
Один з класів, визначених у модулі datetime — це клас datetime. Ми використали метод now() для створення об’єкта datetime, який містить поточну локальну дату та час.
Розглянемо приклад отримання лише поточної дати:
|
1 2 3 4 5 6 |
import datetime # Отримуємо поточну дату current_date = datetime.date.today() print(current_date) |
Результат:
2022-12-27
Ми використали метод today(), визначений у класі date, для отримання об’єкта date, який містить поточну локальну дату.
Атрибути модуля datetime
Ми можемо використати функцію dir() для отримання списку, що містить усі атрибути модуля:
|
1 2 3 |
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']
Серед усіх атрибутів найчастіше використовуються:
datetime.datetime — представляє один момент часу, який включає дату та час;
datetime.date — представляє дату (рік, місяць та день) без часу;
datetime.time — представляє час (година, хвилина, секунда та мікросекунда) без дати;
datetime.timedelta — представляє тривалість періоду часу, яка може бути використана для виконання арифметичних операцій з об’єктами типу datetime.
Клас datetime.date в Python
В Python ми можемо створювати об’єкти date з класу date. Об’єкт date представляє дату (рік, місяць та день). Наприклад:
|
1 2 3 4 |
import datetime d = datetime.date(2022, 12, 25) print(d) |
Результат:
2022-12-25
Тут date() — це конструктор класу date. Конструктор приймає три аргументи: year, month та day.
Також ми можемо імпортувати тільки клас date із модуля datetime. Наприклад:
|
1 2 3 4 |
from datetime import date d = date(2022, 12, 25) print(d) |
Результат:
2022-12-25
Тут стейтмент from datetime import date імпортує тільки клас date з модуля datetime.
Ми також можемо створити об’єкт date, який містить поточну дату, використовуючи метод класу today(). Наприклад:
|
1 2 3 4 5 6 |
from datetime import date # Використовуємо метод today() для отримання поточної дати todays_date = date.today() print("Today's date =", todays_date) |
Результат:
Today's date = 2022-12-27
Ми також можемо створювати об’єкти date з тимчасової мітки.
Тимчасова мітка Unix — це кількість секунд між конкретною датою та 1 січня 1970 року за Всесвітнім координованим часом (скор. “UTC” від англ. “Coordinated Universal Time”). Ми можемо конвертувати тимчасову мітку на дату, використовуючи метод fromtimestamp(). Наприклад:
|
1 2 3 4 |
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp) |
Результат:
Date = 2012-01-11
Ще ми можемо отримати рік, місяць, день, день тижня і т.д. з об’єкта date окремо. Наприклад:
|
1 2 3 4 5 6 7 8 |
from datetime import date # Об'єкт date, що містить сьогоднішню дату today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day) |
Результат:
Current year: 2022
Current month: 12
Current day: 27
Тут ми вивели атрибути об’єкта date, а саме year, month та day.
Клас datetime.time в Python
Об’єкт time, створений із класу time, представляє локальний час.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from datetime import time # time(година = 0, хвилина = 0, секунда = 0) a = time() print(a) # time(година, хвилина та секунда) b = time(11, 34, 56) print(b) # time(година, хвилина та секунда) c = time(hour = 11, minute = 34, second = 56) print(c) # time(година, хвилина, секунда, мікросекунда) d = time(11, 34, 56, 234566) print(d) |
Результат:
a = 00:00:00
b = 11:34:56
c = 11:34:56
d = 11:34:56.234566
Як тільки ми створюємо об’єкт time, ми можемо легко виводити його атрибути, такі як hour, minute і т.д. Наприклад:
|
1 2 3 4 5 6 7 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) |
Результат:
|
1 2 3 4 |
Hour = 11 Minute = 34 Second = 56 Microsecond = 0 |
Зверніть увагу, що ми не передали аргумент microsecond. Отже, виводиться його значення за замовчуванням 0.
Клас datetime.datetime в Python
Модуль datetime має клас datetime, який може містити інформацію з двох об’єктів date та time.
|
1 2 3 4 5 6 7 8 9 |
from datetime import datetime # datetime(рік, місяць, день) a = datetime(2022, 12, 28) print(a) # datetime(рік, місяць, день, година, хвилина, секунда, мікросекунда) b = datetime(2022, 12, 28, 23, 55, 59, 342380) print(b) |
Результат:
2022-12-28 00:00:00
2022-12-28 23:55:59.342380
Перші три аргументи year, month та day у конструкторі datetime() обов’язкові.
Розглянемо приклад виведення року, місяця, години, хвилини та тимчасової мітки:
|
1 2 3 4 5 6 7 8 9 |
from datetime import datetime a = datetime(2022, 12, 28, 23, 55, 59, 342380) print("Year =", a.year) print("Month =", a.month) print("Hour =", a.hour) print("Minute =", a.minute) print("Timestamp =", a.timestamp()) |
Результат:
year = 2022
month = 12
day = 28
hour = 23
minute = 55
timestamp = 1511913359.34238
Клас datetime.timedelta в Python
Об’єкт timedelta є різницею між двома датами або часом. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from datetime import datetime, date # Використовуємо date() t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) # Використовуємо datetime() 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'>
Зверніть увагу, що t3 та t6 є об’єктами типу <class 'datetime.timedelta'>.
Різниця між двома об’єктами timedelta:
|
1 2 3 4 5 6 7 8 |
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
Тут ми створили два об’єкти t1 та t2 типу timedelta, і їхня різниця виведена на екран.
Ми також можемо отримати загальну кількість секунд в об’єкті timedelta, використовуючи метод total_seconds(). Наприклад:
|
1 2 3 4 |
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("Total seconds =", t.total_seconds()) |
Результат:
Форматування datetime в Python
Спосіб подання дати та часу може бути різним. У США використовують формат mm/dd/yyyy, тоді як у Великобританії використовують формат dd/mm/yyyy. Python має методи strftime() та strptime() для відображення дати та часу в різних форматах.
Метод strftime() в Python
Метод strftime() визначений у класах date, datetime та time і створює форматований рядок з переданих об’єктів date, datetime або time. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from datetime import datetime # Поточна дата та час now = datetime.now() t = now.strftime("%H:%M:%S") print("Time:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # Формат mm/dd/YY H:M:S print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # Формат dd/mm/YY 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 і т.д. — це коди формату. Метод strftime() приймає один або кілька кодів формату та повертає на їх основі форматований рядок.
У цьому прикладі t, s1 та s2 — це рядки.
Нижче наведено деякі коди формату:
%Y — рік [0001,..., 2018, 2019,..., 9999];
%m — місяць [01, 02, ..., 11, 12];
%d — день [01, 02, ..., 30, 31];
%H — година [00, 01, ..., 22, 23];
%M — хвилина [00, 01, ..., 58, 59];
%S — секунда [00, 01, ..., 58, 59].
Метод strptime() в Python
Метод strptime() створює об’єкт datetime з переданого рядка (представляючи дату та час). Наприклад:
|
1 2 3 4 5 6 7 8 9 |
from datetime import datetime date_string = "25 December, 2022" print("date_string =", date_string) # Використовуємо strptime() для створення об'єкта datetime date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object) |
Результат:
date_string = 25 december, 2022
date_object = 2018-06-21 00:00:00
Метод strptime() приймає два аргументи:
рядок, який представляє дату та час;
код формату, еквівалентний першому аргументу.
До речі, коди формату %d, %B та %Y використовуються для day, month (повна назва) та year відповідно.
Часові пояси в Python
Припустимо, ми працюємо над проектом і нам потрібно отримати дату та час на основі їх часового поясу. Замість того, щоб керувати часовим поясом самостійно, краще використовувати сторонній модуль pytZ. Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S")) |
Результат:
Local: 12/27/2022, 09:40:19
NY: 12/27/2022, 04:40:19
London: 12/27/2022, 09:40:19
Тут datetime_NY та datetime_London є об’єктами datetime, що містять поточну дату та час відповідно до їх часових поясів.

(12 оцінок, середня: 4,42 з 5)