English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Управление потоком в Python

Функции в Python

Типы данных в Python

Файловые операции в Python

Объекты и классы в Python

Даты и время в Python

Продвинутые знания Python

Руководство по Python

Время и дата (datetime) в Python

В этой статье вы将通过 примеры узнать, как работать с датой и временем в Python.

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

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

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

Когда вы запустите программу, вывод будет похож на:

2020-04-13 17:09:49.015911

Здесь мы используем оператор import datetime для импортаdatetimeМодуль.

Одним из классов, определенных в модуле datetime, является класс datetime. Затем мы используем метод now() для создания объекта datetime, содержащего текущую местную дату и время.

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

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

Когда вы запустите программу, вывод будет похож на:

2020-04-13

В этой программе мы используем метод today() из класса date, определенного в 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:

  • класс date

  • класс time

  • класс datetime

  • класс timedelta

класс datetime.date

Вы можете примеризировать объекты date из класса date. Объект date represents a date (year, month, day).

Пример 3: представление даты с помощью объекта Date

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: получение текущей даты

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

from datetime import date
today = date.today()
print("Текущая дата =", today)

Пример 5: получение даты из времени

Мы также можем создать объект даты из времени. Unix-время — это количество секунд между определенной датой и UTC с 1 января 1970 года. Используя метод fromtimestamp(), можно преобразовать время в дату.

from datetime import date
timestamp = date.fromtimestamp(1576244364)
print("Дата =", timestamp)

При запуске программы выводится:

Дата = 2019-12-13

Пример 6: напечатайте текущий год, месяц и день

Мы можем легко получить год, месяц, день, день недели и т.д. из объекта даты. Вот так:

from datetime import date
# Сегодняшняя дата
today = date.today() 
print("Текущий год:", today.year)
print("Текущий месяц:", today.month)
print("Текущий день:", 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("часы=", a.hour)
print("минуты=", a.minute)
print("секунды=", a.second)
print("микросекунды=", a.microsecond)

Когда вы запустите пример, вывод будет:

часы = 11
минуты = 34
секунды = 56
микросекунды = 0

Обратите внимание, что мы еще не передалимикросекундыпараметров. Поэтому, будет напечатана его значение по умолчанию 0.

datetime.datetime

Модуль datetime имеет класс dateclass, который может содержать данные изdateиtimeИнформация об объекте.

Пример 9: Объект datetime в Python

from datetime import datetime
#datetime(year, month, day)
a = datetime(2019, 11, 28)
print(a)
# datetime(year, month, day, hour, minute, second, microsecond)
b = datetime(2019, 11, 28, 23, 55, 59, 342380)
print(b)

При запуске программы выводится:

2019-11-28 00:00:00
2019-11-28 23:55:59.342380

Первые три параметра year, month и day в конструкторе datetime() обязательны.

Пример 10: Вывод года, месяца, часа, минуты и времени戳а

from datetime import datetime
a = datetime(2019, 12, 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 = 2019
Month = 12
Day = 28
Hour = 23
Minute = 55
Timestamp = 1577548559.34238

datetime.timedelta

Объект timedelta represents the difference between two dates or times.

Пример 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("тип t3 =", type(t3)) 
print("тип t6 =", type(t6))

При запуске программы выводится:

t3 = 201 дней, 0:00:00
t6 = -333 дней, 1:14:20
тип t3 = <class 'datetime.timedelta'>
тип t6 = <class 'datetime.timedelta'>

Обратите внимание,t3и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

Здесь мы создаем два объекта timedeltat1иt2Количество дней, отличающихся между ними, выводится на экран.

Пример 13: Вывод отрицательного объекта timedelta

from datetime import timedelta
t1 = timedelta(seconds = 33)
t2 = timedelta(seconds = 54)
t3 = t1 - t2
print("t3 =", t3)
print("t3 =", abs(t3))

При запуске программы выводится:

t3 = -1 day, 23:59:39
t3 = 0:00:21

Пример 14: Длительность (в секундах)

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

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 на целое и дробное число.

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

Формат представления даты и времени может варьироваться в зависимости от места, организации и т.д. В США более распространен формат mm/dd/yyyy, а в Великобритании dd/mm/yyyy.

Python предоставляет методы strftime() и strptime() для обработки этой проблемы.

Python strftime() - строковый объект даты и времени

Метод strftime() определен в классах date, datetime и time. Этот метод создает форматированную строку на основе предоставленной даты, даты и времени или объекта времени.

Пример 15: форматирование даты с помощью 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")
# формат 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)

Когда вы запустите программу, вывод будет похож на:

время: 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]

Для получения更多信息 о коде strftime() и его форматировании посетите:strftime() в Python.

Python strptime() - строковый формат даты и времени

Метод strptime() создает объект datetime из заданной строки (представляющей дату и время).

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

При запуске программы выводится:

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

у метода strptime() два параметра:

  1. строки, представляющие дату и время

  2. равны кодам формата первого параметра

Кстати, коды формата %d, %B и %Y используются для дня, месяца (полного названия) и года соответственно.

посетитьstrptime() в Pythonузнать больше информации.

Обработка временных поясов в 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"))

Когда вы запустите программу, вывод будет похож на:

Локальное время: 20.12.2018 13:10:44.260462
America/New_York время: 20.12.2018 13:10:44.260462
Europe/London время: 20.12.2018 13:10:44.260462

Здесь,datetime_NYиdatetime_LondonЭто объект datetime, содержащий текущую дату и время с各自的 часовыми поясами.