Документация по Python. Теоретические материалы, и практические задачи

python 3 datetime

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

Прежде чем мы окунемся в пучину знаний, создадим пару простеньких программ работающих с датой и временем.

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

                    
import datetime

datetime_now = datetime.datetime.now()
print(datetime_now)
Результат:
2018-05-19 09:26:03.478039

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

Пример 2. Получить текущую дату python

                    
import datetime

date_now= datetime.date.today()
print(date_now)

В этом примере мы используем метод today() из класса date, что бы получить текущую дату.

 Пример 3. Получение текущей даты Python

Мы можем создать объект date, содержащий текущую дату используя метод класса today().

                    
from datetime import date

today = date.today()

print("Текущая дата =", today)

Пример 4. Сегодняшний год месяц и день

Следующий код покажет нам, как легко получить текущий год, месяц, день недели и.т.д.

                    
from datetime import date

today = date.today() 

print("Текущий год:", today.year)
print("Текущий месяц:", today.month)
print("Текущий день:", today.day)

Результат:
Текущий год: 2021
Текущий месяц: 6
Текущий день: 10

Пример 5. Текущий час, минута, секунды и миллисекунды

Создаем объект time, и получаем его атрибуты. Обращаю ваше внимание, что мы не передаем microsecond, поэтому его значение будет 0.

                    
from datetime import time

a = time(11, 34, 56)

print("Час=", a.hour)
print("Минута=", a.minute)
print("Секунда=", a.second)
print("Миллисекунда=", a.microsecond)

Результат:
Час= 11
Минута= 34
Секунда= 56
Миллисекунда= 0

Пример 6. Разница между двумя датами и временем

timedelta — объект возвращает разницу между двумя датами.

                    
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'>

Пример 7. Продолжительность времени в секундах

Получаем общее количество секунд в объекте timedelta с помощью функции total_seconds().

                    
from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("Всего секунд =", t.total_seconds())

Результат:
Всего секунд = 435633.233423

Мы так же можем найти сумму двух дат с помощью оператора +. По мимо этого, мы можем так же делить и умножать объект timedelta на целые и дробные числа.

Формат получения даты

Я думаю вы отлично понимаете, что в разных странах разный формат даты и времени. Если наиболее распространенным форматом в России является dd/mm/yyyy то например в США mm/dd/yyyy.

Для обработки формата даты, в Python используются функции strftime() и strptime().

Пример 8. Форматирование даты с помощью strftime

                    
from datetime import datetime

# Текущая дата и время
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("Время:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
print("s2:", s2)

Результат:

time: 04:34:52
s1: 06/09/2021, 04:34:52
s2: 09/06/2021, 04:34:52

И так, тут у нас ситуация складывается следующим образом. %Y, %m,%d,%H являются кодом для форматирования strftime().

  • %Y — год [0001,….2010,2011,2012,….9999]
  • %m — месяц[01,02,03,…12]
  • %d — день [01,02,03,…31]
  • %H — час [00,01,02,03,…23]
  • %M — минуты [00,01,02,…59]
  • %S — секунда [00,01,02,03,….59]

Подробнее о функции strftime().

Пример 9. 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)

Метод strptime() принимает в качестве аргумента строку, которая представляет дату и время. Но необходимо учитывать, что название месяца нужно указывать на английском языке. Подробнее о 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"))

Результат:

Local time: 2018-12-20 13:10:44.260462
America/New_York time: 2018-12-20 13:10:44.260462
Europe/London time: 2018-12-20 13:10:44.260462	

Методы модуля datetime в Python

МетодыОписание
datetime.today()Текущая дата и время
datetime.fromordinal(ordinal)дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
datetime.nowТекущая дата и время
datetime.combine объект datetime из комбинации объектов date и time.
datetime.strptimeпреобразует строку в datetime
datetime.strftime
datetime.date объект даты (с отсечением времени).
datetime.timeобъект времени (с отсечением даты)
datetime.replace возвращает новый объект datetime с изменёнными атрибутами.
datetime.timetupleвозвращает struct_time из datetime
datetime.toordinalколичество дней, прошедших с 01.01.1970
datetime.timestampвозвращает время в секундах с начала эпохи.
datetime.weekdayдень недели в виде числа, понедельник - 0, воскресенье - 6
datetime.isoweekdayдень недели в виде числа, понедельник - 1, воскресенье - 7
datetime.isocalendarкортеж (год в формате ISO, ISO номер недели, ISO день недели).
datetime.isoformatкрасивая строка вида "YYYY-MM-DDTHH:MM:SS.mmmmmm" или, если microsecond == 0, "YYYY-MM-DDTHH:MM:SS"
datetime.ctime

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *