У цій статті ви навчитесь маніпулювати датою та часом у Python за допомогою прикладів.
Python має модуль з назвою datetime для роботи з датами та часом. Давайте створимо кілька простих програм, пов’язаних із датою та часом, перш ніж копати глибше.
Приклад 1: Отримати поточну дату та час
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Коли ви запускаєте програму, результат буде приблизно таким:
2018-12-19 09: 26: 03.478039
Тут ми імпортували DATETIME модуль , використовуючи import datetime
заяву.
Одним із класів, визначених у datetime
модулі, є datetime
class. Потім ми використали now()
метод для створення datetime
об’єкта, що містить поточну локальну дату та час.
Приклад 2: Отримати поточну дату
import datetime date_object = datetime.date.today() print(date_object)
Коли ви запускаєте програму, результат буде приблизно таким:
2018-12-19
У цій програмі ми використовували today()
метод, визначений у date
класі, для отримання date
об’єкта, що містить поточну локальну дату.
Що всередині datetime?
Ми можемо використовувати функцію dir (), щоб отримати список, що містить усі атрибути модуля.
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 Клас
- Клас timedelta
datetime.date Клас
Ви можете створити екземпляр date
об’єктів з date
класу. Об'єкт дати представляє дату (рік, місяць і день).
Приклад 3: Об'єкт дати, який представляє дату
import datetime d = datetime.date(2019, 4, 13) print(d)
Коли ви запускаєте програму, результат буде:
2019-04-13
Якщо вам цікаво, date()
у наведеному вище прикладі є конструктор date
класу. Конструктор бере три аргументи: рік, місяць і день.
Змінна a є date
об’єктом.
Ми можемо імпортувати date
клас лише з datetime
модуля. Ось як:
from datetime import date a = date(2019, 4, 13) print(a)
Приклад 4: Отримати поточну дату
Ви можете створити date
об’єкт, що містить поточну дату, за допомогою методу класу з іменем today()
. Ось як:
from datetime import date today = date.today() print("Current date =", today)
Приклад 5: Отримати дату з позначки часу
Ми також можемо створювати date
об'єкти з позначки часу. Мітка часу Unix - це кількість секунд між певною датою та 1 січня 1970 року за UTC. Ви можете перетворити мітку часу на дату за допомогою fromtimestamp()
методу.
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Коли ви запускаєте програму, результат буде:
Дата = 2011-11-11
Приклад 6: Друк сьогоднішнього року, місяця та дня
Ми можемо легко отримати рік, місяць, день, день тижня тощо від об’єкта дати. Ось як:
from datetime import date # date object of today's 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 # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) 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: Друк години, хвилини, секунди та мікросекунди
Після створення time
об’єкта ви можете легко надрукувати його атрибути, такі як година, хвилина тощо.
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)
Коли ви запускаєте приклад, результат буде:
година = 11 хвилин = 34 секунди = 56 мікросекунд = 0
Зверніть увагу, що ми не передали мікросекундний аргумент. Отже, 0
друкується значення за замовчуванням .
datetime.datetime
The datetime
module has a class named dateclass
that can contain information from both date and time objects.
Example 9: Python datetime object
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
When you run the program, the output will be:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
The first three arguments year, month and day in the datetime()
constructor are mandatory.
Example 10: Print year, month, hour, minute and timestamp
from datetime import datetime a = datetime(2017, 11, 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())
When you run the program, the output will be:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
datetime.timedelta
A timedelta
object represents the difference between two dates or times.
Example 11: Difference between two dates and times
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))
When you run the program, the output will be:
t3 = 201 days, 0:00:00 t6 = -333 days, 1:14:20 type of t3 = type of t6 =
Notice, both t3 and t6 are of type.
Example 12: Difference between two timedelta objects
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)
When you run the program, the output will be:
t3 = 14 days, 13:55:39
Here, we have created two timedelta
objects t1 and t2, and their difference is printed on the screen.
Example 13: Printing negative timedelta object
from datetime import timedelta t1 = timedelta(seconds = 33) t2 = timedelta(seconds = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
When you run the program, the output will be:
t3 = -1 day, 23:59:39 t3 = 0:00:21
Example 14: Time duration in seconds
You can get the total number of seconds in a timedelta object using total_seconds()
method.
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
When you run the program, the output will be:
total seconds = 435633.233423
You can also find sum of two dates and times using +
operator. Also, you can multiply and divide a timedelta
object by integers and floats.
Python format datetime
The way date and time is represented may be different in different places, organizations etc. It's more common to use mm/dd/yyyy
in the US, whereas dd/mm/yyyy
is more common in the UK.
Python has strftime()
and strptime()
methods to handle this.
Python strftime() - datetime object to string
The strftime()
method is defined under classes date
, datetime
and time
. The method creates a formatted string from a given date
, datetime
or time
object.
Example 15: Format date using strftime()
from datetime import datetime # current date and time 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 format print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # dd/mm/YY H:M:S format print("s2:", s2)
When you run the program, the output will be something like:
time: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
Here, %Y
, %m
, %d
, %H
etc. are format codes. The strftime()
method takes one or more format codes and returns a formatted string based on it.
In the above program, t, s1 and s2 are strings.
%Y
- year (0001,… , 2018, 2019,… , 9999)%m
- month (01, 02,… , 11, 12)%d
- day (01, 02,… , 30, 31)%H
- hour (00, 01,… , 22, 23%M
- minute (00, 01,… , 58, 59)%S
- second (00, 01,… , 58, 59)
To learn more about strftime()
and format codes, visit: Python strftime().
Python strptime() - string to datetime
The strptime()
method creates a datetime
object from a given string (representing date and time).
Example 16: strptime()
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)
When you run the program, the output will be:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
The strptime()
method takes two arguments:
- рядок, що представляє дату та час
- код формату, еквівалентний першому аргументу
До речі, %d
, %B
і %Y
коди формату використовуються для дня, місяця (повне найменування) та рік відповідно.
Відвідайте Python strptime (), щоб дізнатися більше.
Обробка часового поясу в Python
Припустимо, ви працюєте над проектом, і вам потрібно відобразити дату та час на основі часового поясу. Замість того, щоб намагатися самостійно обробляти часовий пояс, ми пропонуємо використовувати сторонній модуль 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') 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"))
Коли ви запускаєте програму, результат буде приблизно таким:
Місцевий час: 2018-12-20 13: 10: 44.260462 Америка / Нью-Йорк, час: 2018-12-20 13: 10: 44.260462 Європа / Лондон, час: 2018-12-20 13: 10: 44.260462
Тут datetime_NY та datetime_London - це об’єкти datetime, що містять поточну дату та час відповідного часового поясу.