English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы将通过 примеры узнать, как работать с датой и временем в Python.
Python имеет функцию под названиемdatetimeМодуль, предназначенный для обработки даты и времени. Перед тем как углубиться в изучение, давайте создадим несколько простых программ, связанных с датой и временем.
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Когда вы запустите программу, вывод будет похож на:
2020-04-13 17:09:49.015911
Здесь мы используем оператор import datetime для импортаdatetimeМодуль.
Одним из классов, определенных в модуле datetime, является класс datetime. Затем мы используем метод now() для создания объекта datetime, содержащего текущую местную дату и время.
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
Вы можете примеризировать объекты date из класса date. Объект date represents a date (year, month, day).
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)
Вы можете создать объект даты, содержащий текущую дату, с помощью метода today() класса. Вот как это делается:
from datetime import date today = date.today() print("Текущая дата =", today)
Мы также можем создать объект даты из времени. Unix-время — это количество секунд между определенной датой и UTC с 1 января 1970 года. Используя метод fromtimestamp(), можно преобразовать время в дату.
from datetime import date timestamp = date.fromtimestamp(1576244364) print("Дата =", timestamp)
При запуске программы выводится:
Дата = 2019-12-13
Мы можем легко получить год, месяц, день, день недели и т.д. из объекта даты. Вот так:
from datetime import date # Сегодняшняя дата today = date.today() print("Текущий год:", today.year) print("Текущий месяц:", today.month) print("Текущий день:", today.day)
Временные объекты, примеренные из класса time, представляют местное время.
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
После создания объекта 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 имеет класс dateclass, который может содержать данные изdateиtimeИнформация об объекте.
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() обязательны.
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
Объект timedelta represents the difference between two dates or 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("тип 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'>.
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Количество дней, отличающихся между ними, выводится на экран.
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
Вы можете получить общее количество секунд в объекте 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 на целое и дробное число.
Формат представления даты и времени может варьироваться в зависимости от места, организации и т.д. В США более распространен формат mm/dd/yyyy, а в Великобритании dd/mm/yyyy.
Python предоставляет методы strftime() и strptime() для обработки этой проблемы.
Метод strftime() определен в классах date, datetime и time. Этот метод создает форматированную строку на основе предоставленной даты, даты и времени или объекта времени.
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.
Метод 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
у метода strptime() два параметра:
строки, представляющие дату и время
равны кодам формата первого параметра
Кстати, коды формата %d, %B и %Y используются для дня, месяца (полного названия) и года соответственно.
посетить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"))
Когда вы запустите программу, вывод будет похож на:
Локальное время: 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, содержащий текущую дату и время с各自的 часовыми поясами.