Работа с датой и временем: модуль datetime
Содержание:
- time.struct_time Class
- Поддерживаемые операции timedelta:
- Необходимый инструмент и материалы
- Timezone Constants¶
- How to Use Date & DateTime Class
- datetime.datetime
- Операции с датами
- Clock ID Constants¶
- What is TimeTuple?
- Приемы использования модуля datetime.
- Получаем текущее время и дату.
- Преобразуем объект в секунды ():
- Преобразуем время в секундах () в объект :
- Получить объект из отдельных объектов и :
- Форматирование вывода строки c датой и временем:
- Преобразование строки с датой и временем в объект :
- Сложение и вычитание даты и времени:
- Сравнение объектов :
- datetime.strptime() для преобразования строки в дату времени
- Measuring Performance
- Что дает автору копирайт
- Python 2 Example
time.struct_time Class
Several functions in the module such as , etc. either take object as an argument or return it.
Here’s an example of object.
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=6, tm_min=35, tm_sec=17, tm_wday=3, tm_yday=361, tm_isdst=0)
Index | Attribute | Values |
---|---|---|
0000, …., 2018, …, 9999 | ||
1 | 1, 2, …, 12 | |
2 | 1, 2, …, 31 | |
3 | 0, 1, …, 23 | |
4 | 0, 1, …, 59 | |
5 | 0, 1, …, 61 | |
6 | 0, 1, …, 6; Monday is 0 | |
7 | 1, 2, …, 366 | |
8 | 0, 1 or -1 |
The values (elements) of the object are accessible using both indices and attributes.
Python time.localtime()
The function takes the number of seconds passed since epoch as an argument and returns in local time.
When you run the program, the output will be something like:
result: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=15, tm_min=49, tm_sec=29, tm_wday=3, tm_yday=361, tm_isdst=0) year: 2018 tm_hour: 15
If no argument or is passed to , the value returned by is used.
Python time.gmtime()
The function takes the number of seconds passed since epoch as an argument and returns in UTC.
When you run the program, the output will be:
result = time.struct_time(tm_year=2018, tm_mon=12, tm_mday=28, tm_hour=8, tm_min=44, tm_sec=4, tm_wday=4, tm_yday=362, tm_isdst=0) year = 2018 tm_hour = 8
If no argument or is passed to , the value returned by is used.
Python time.mktime()
The function takes (or a tuple containing 9 elements corresponding to ) as an argument and returns the seconds passed since epoch in local time. Basically, it’s the inverse function of .
The example below shows how and are related.
When you run the program, the output will be something like:
t1: time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=15, tm_min=49, tm_sec=29, tm_wday=3, tm_yday=361, tm_isdst=0) s: 1545925769.0
Python time.asctime()
The function takes (or a tuple containing 9 elements corresponding to ) as an argument and returns a string representing it. Here’s an example:
When you run the program, the output will be:
Result: Fri Dec 28 08:44:04 2018
Python time.strftime()
The function takes (or tuple corresponding to it) as an argument and returns a string representing it based on the format code used. For example,
When you run the program, the output will be something like:
12/28/2018, 09:47:41
Here, , , , etc. are format codes.
- — year
- — month
- — day
- — hour [00, 01, …, 22, 23
- — minutes
- — second
To learn more, visit: .
Python time.strptime()
The function parses a string representing time and returns .
When you run the program, the output will be:
time.struct_time(tm_year=2018, tm_mon=6, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=172, tm_isdst=-1)
Поддерживаемые операции timedelta:
Операция | Результат | Замечания |
t1 = t2 + t3 | Сумма t2 и t3. Впоследствии t1-t2 == t3 и t1-t3 == t2 верны. | (1) |
t1 = t2 — t3 | Разница t2 и t3. Впоследствии t1 == t2 — t3 и t2 == t1 + t3 верны. | (1)(6) |
t1 = t2 * it1 = i * t2 | Дельта умножается на целое число ‘int’. Впоследствии t1 // i == t2 верно, если i! = 0. | |
В общем случае t1 * i == t1 * (i-1) + t1 верно. | (1) | |
t1 = t2 * ft1 = f * t2 | Дельта умножается на ‘float’. Результат округляется до ближайшего кратного ‘timedelta.resolution’ с использованием округления от половины до четности. | |
f = t2 / t3 | Деление общей длительности ‘t2’ на интервал ‘t3’. Возвращает объект ‘float’. | (3) |
t1 = t2 / ft1 = t2 / i | Дельта делится на ‘float’ или ‘Int’. Результат округляется до ближайшего кратного ‘timedelta.resolution’ с использованием округления от половины до четности. | |
t1 = t2 // it1 = t2 // t3 | Вычисляется, остаток (если есть) выбрасывается. Во втором случае возвращается целое число. | (3) |
t1 = t2 % t3 | Остаток вычисляется как объект ‘timedelta’. | (3) |
q, r = divmod(t1, t2) | Вычисляет частное и остаток: q = t1 // t2 и r = t1% t2. ‘q’ представляет собой целое число, а ‘r’ представляет собой объект ‘datetime.timedelta’. | (3) |
+t1 | Возвращает объект ‘datetime.timedelta’ с тем же значением. | (2) |
-t1 | Эквивалентно datetime.timedelta(-t1.days, -t1.seconds, -t1.microseconds) и так же t1 * -1. | (1) (4) |
abs(t) | Эквивалентно ‘+t’, когда t.days >= 0, и ‘-t’, когда t.days | (2) |
str(t) | Возвращает строку в форме ,] H: MM: SS , где D отрицательно для отрицательного ‘t’. | (5) |
repr(t) | Возвращает строковое представление объекта ‘datetime.timedelta’ в виде вызова конструктора со значениями канонического атрибута. |
Замечания:
- Это точно, но может быть переполнение.
- Это точно и не может быть переполнения.
- Деление на 0 поднимает [].
- не может быть представлен как объект .
-
Строковые представления объектов нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательных .Например:
>>> datetime.timedelta(days=-1, seconds=68400) >>> print(_) # -1 day, 19:00:00
-
Выражение всегда будет равно выражению , кроме случаев, когда равно . В этом случае первое даст результат, а второе вызовет переполнение.
В дополнение к операциям, перечисленным выше, объекты поддерживают определенные дополнения и вычитания с объектами и . Смотрите «Частые приемы работы c «.
Поддерживаются сравнения объектов с некоторыми оговорками.
Сравнения или всегда возвращают , независимо от типа сравниваемого объекта:
>>> from datetime import timedelta >>> delta1 = timedelta(seconds=57) >>> delta2 = timedelta(hours=25, seconds=2) >>> delta2 != delta1 # True >>> delta2 == 5 # False
Для всех других сравнений, таких как и когда объект сравнивается с объектом другого типа, вызывается исключение :
>>> delta2 > delta1 # True >>> delta2 > 5 # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: '>' not supported between instances of 'datetime.timedelta' and 'int'
В булевых контекстах объект считается истинным тогда и только тогда, когда он не равен .
Необходимый инструмент и материалы
Для строительства поддона потребуются следующие материалы и инструментарий:
- правило;
- рулетка;
- нож строительный;
- кусачки;
- строительный уровень;
- мастерок;
- шпатель обыкновенный и шпатель зубчатый;
- зубило;
- пластиковые трубы (отводная труба слива);
- канализационный трап (горловина слива);
- деревянные чурки (подставки);
- бетонная стяжка (сухая смесь);
- пленка или кусок рубероида;
- облицовочный силикатный или красный кирпич;
- гидроизоляционный состав (Файберпул, Декопроф);
-
плиточный клей ЕК-1000 и ЕК-6000;
- резиновый мастерок для плиточного клея;
- наждачная бумага;
-
мозаика и керамическая плитка водостойких марок;
-
затирка для плитки;
- цемент.
Timezone Constants¶
-
The offset of the local DST timezone, in seconds west of UTC, if one is defined.
This is negative if the local DST timezone is east of UTC (as in Western Europe,
including the UK). Only use this if is nonzero. See note below.
-
Nonzero if a DST timezone is defined. See note below.
-
The offset of the local (non-DST) timezone, in seconds west of UTC (negative in
most of Western Europe, positive in the US, zero in the UK). See note below.
-
A tuple of two strings: the first is the name of the local non-DST timezone, the
second is the name of the local DST timezone. If no DST timezone is defined,
the second string should not be used. See note below.
Note
For the above Timezone constants (, , ,
and ), the value is determined by the timezone rules in effect
at module load time or the last time is called and may be incorrect
for times in the past. It is recommended to use the and
results from to obtain timezone information.
See also
- Module
-
More object-oriented interface to dates and times.
- Module
-
Internationalization services. The locale setting affects the interpretation
of many format specifiers in and . - Module
-
General calendar-related functions. is the
inverse of from this module.
Footnotes
-
The use of is now deprecated, but the escape that expands to the
preferred hour/minute offset is not supported by all ANSI C libraries. Also, a
strict reading of the original 1982 RFC 822 standard calls for a two-digit
year (%y rather than %Y), but practice moved to 4-digit years long before the
year 2000. After that, RFC 822 became obsolete and the 4-digit year has
been first recommended by RFC 1123 and then mandated by RFC 2822.
How to Use Date & DateTime Class
Step 1) Before you run the code for datetime, it is important that you import the date time modules as shown in the screenshot below.
These import statements are pre-defined pieces of functionality in the Python library that let you manipulates dates and times, without writing any code.
Consider the following points before executing the datetime code
from datetime import date
This line tells the Python interpreter that from the datetime module import the date class We are not writing the code for this date functionality alas just importing it for our use
Step 2) Next, we create an instance of the date object.
Step 3) Next, we print the date and run the code.
The output is as expected.
datetime.datetime
Объект datetime.datetime содержит всю информацию объектов datetime.date плюс datetime.time. Давайте приведем несколько примеров, для лучшего понимания разницы между этим объектом, и объектом datetime.date.
Python
import datetime
a = datetime.datetime(2017, 3, 5)
print(a) # datetime.datetime(2017, 3, 5, 0, 0)
b = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(b) # datetime.datetime(2017, 3, 5, 12, 30, 10)
d = datetime.datetime(2017, 3, 5, 12, 30, 10)
print(d.year) # 2017
print(d.second) # 10
print(d.hour) # 12
1 |
importdatetime a=datetime.datetime(2017,3,5) print(a)# datetime.datetime(2017, 3, 5, 0, 0) b=datetime.datetime(2017,3,5,12,30,10) print(b)# datetime.datetime(2017, 3, 5, 12, 30, 10) d=datetime.datetime(2017,3,5,12,30,10) print(d.year)# 2017 print(d.second)# 10 print(d.hour)# 12 |
Мы видим, что datetime.datetime принимает несколько дополнительных аргументов: год, месяц, день, час, минута и секунда. Это также позволяет вам указывать информацию о микросекундах и часовом поясе. При работе с базами данных, данные типы объектов будут использоваться достаточно часто. Большую часть вашей работы, вам нужно будет конвертировать форматы date или datetime Python в форматы SQL datetime или timestamp
Обратите внимание на то, что today совместно с datetime.datetime использует два разных метода:
Python
import datetime
a = datetime.datetime.today()
print(a) # datetime.datetime(2017, 4, 5, 0, 16, 54, 989663)
b = datetime.datetime.now()
print(b) # datetime.datetime(2017, 4, 5, 0, 17, 8, 24239)
1 |
importdatetime a=datetime.datetime.today() print(a)# datetime.datetime(2017, 4, 5, 0, 16, 54, 989663) b=datetime.datetime.now() print(b)# datetime.datetime(2017, 4, 5, 0, 17, 8, 24239) |
Модуль datetime содержит другой метод, под названием strftime. Этот метод позволяет разработчику создавать строку, отображающую время в более понятной для человека форме. Существует целая таблица параметров форматирования, с которой рекомендуется ознакомиться в документации Python, в . Давайте взглянем на несколько примеров, показывающих всю полезность данного метода:
Python
import datetime
a = datetime.datetime.today().strftime(«%Y%m%d»)
print(a) # ‘20170405’
today = datetime.datetime.today()
print( today.strftime(«%m/%d/%Y») ) # ’04/05/2017′
print( today.strftime(«%Y-%m-%d-%H.%M.%S») ) # 2017-04-05-00.18.00
1 |
importdatetime a=datetime.datetime.today().strftime(«%Y%m%d») print(a)# ‘20170405’ today=datetime.datetime.today() print(today.strftime(«%m/%d/%Y»))# ’04/05/2017′ print(today.strftime(«%Y-%m-%d-%H.%M.%S»))# 2017-04-05-00.18.00 |
Первый пример – это скорее хитрость. В нем показано, как конвертировать сегодняшний объект datetime в строку, следующую за форматом YYYYMMDD (ГГГГММДД). Второй пример более наглядный.
В нем мы присваиваем объект datetime переменной под названием today и применяем два разных параметра форматирования строки. Первый параметр добавляет косые черточки между элементами datetime, а также перегруппировывает datetime, теперь он делится на месяц, день и год. В последнем примере мы создаем временную отметку, которая следует типичному формату: YYYY-MM-DD.HH.MM.SS. Если вам нужно указать год как двухзначный (“YY”), вы можете заменить %Y на %y.
Операции с датами
Последнее обновление: 05.05.2017
Фоматирование дат и времени
Для форматирования объектов date и time в обоих этих классах предусмотрен метод strftime(format). Этот метод принимает только один
параметр, указывающий на формат, в который нужно преобразовать дату или время.
Для определения формата мы можем использовать один из следующих кодов форматирования:
-
%a: аббревиатура дня недели. Например, Wed — от слова Wednesday (по умолчанию используются английские наименования)
-
%A: день недели полностью, например, Wednesday
-
%b: аббревиатура названия месяца. Например, Oct (сокращение от October)
-
%B: название месяца полностью, например, October
-
%d: день месяца, дополненный нулем, например, 01
-
%m: номер месяца, дополненный нулем, например, 05
-
%y: год в виде 2-х чисел
-
%Y: год в виде 4-х чисел
-
%H: час в 24-х часовом формате, например, 13
-
%I: час в 12-ти часовом формате, например, 01
-
%M: минута
-
%S: секунда
-
%f: микросекунда
-
%p: указатель AM/PM
-
%c: дата и время, отформатированные под текущую локаль
-
%x: дата, отформатированная под текущую локаль
-
%X: время, форматированное под текущую локаль
Используем различные форматы:
from datetime import datetime now = datetime.now() print(now.strftime("%Y-%m-%d")) # 2017-05-03 print(now.strftime("%d/%m/%Y")) # 03/05/2017 print(now.strftime("%d/%m/%y")) # 03/05/17 print(now.strftime("%d %B %Y (%A)")) # 03 May 2017 (Wednesday) print(now.strftime("%d/%m/%y %I:%M")) # 03/05/17 01:36
При выводе названий месяцев и дней недели по умолчанию используются английские наименования. Если мы хотим использовать текущую локаль, но то мы
можем ее предварительно установить с помощью модуля locale:
from datetime import datetime import locale locale.setlocale(locale.LC_ALL, "") now = datetime.now() print(now.strftime("%d %B %Y (%A)")) # 03 Май 2017 (среда)
Сложение и вычитани дат и времени
Нередко при работе с датами возникает необходимость добавить к какой-либо дате определенный промежуток времени или, наоборот, вычесть некоторый период. И специально для
таких операций в модуле datetime определен класс timedelta. Фактически этот класс определяет некоторый период времени.
Для определения промежутка времени можно использовать конструктор timedelta:
timedelta( )
В конструктор мы последовательно передаем дни, секунды, микросекунды, миллисекунды, минуты, часы и недели.
Определим несколько периодов:
from datetime import timedelta three_hours = timedelta(hours=3) print(three_hours) # 3:00:00 three_hours_thirty_minutes = timedelta(hours=3, minutes=30) # 3:30:00 two_days = timedelta(2) # 2 days, 0:00:00 two_days_three_hours_thirty_minutes = timedelta(days=2, hours=3, minutes=30) # 2 days, 3:30:00
Используя timedelta, мы можем складывать или вычитать даты. Например, получим дату, которая будет через два дня:
from datetime import timedelta, datetime now = datetime.now() print(now) # 2017-05-03 17:46:44.558754 two_days = timedelta(2) in_two_days = now + two_days print(in_two_days) # 2017-05-05 17:46:44.558754
Или узнаем, сколько было времени 10 часов 15 минут назад, то есть фактически нам надо вычесть из текущего времени 10 часов и 15 минут:
from datetime import timedelta, datetime now = datetime.now() till_ten_hours_fifteen_minutes = now - timedelta(hours=10, minutes=15) print(till_ten_hours_fifteen_minutes)
Свойства timedelta
Класс timedelta имеет несколько свойств, с помощью которых мы можем получить временной промежуток:
-
days: возвращает количество дней
-
seconds: возвращает количество секунд
-
microseconds: возвращает количество микросекунд
Кроме того, метод total_seconds() возвращает общее количество секунд, куда входят и дни, и собственно секунды, и микросекунды.
Например, узнаем какой временной период между двумя датами:
from datetime import timedelta, datetime now = datetime.now() twenty_two_may = datetime(2017, 5, 22) period = twenty_two_may - now print("{} дней {} секунд {} микросекунд".format(period.days, period.seconds, period.microseconds)) # 18 дней 17537 секунд 72765 микросекунд print("Всего: {} секунд".format(period.total_seconds())) # Всего: 1572737.072765 секунд
Сравнение дат
Также как и строки и числа, даты можно сравнивать с помощью стандартных операторов сравнения:
from datetime import datetime now = datetime.now() deadline = datetime(2017, 5, 22) if now > deadline: print("Срок сдачи проекта прошел") elif now.day == deadline.day and now.month == deadline.month and now.year == deadline.year: print("Срок сдачи проекта сегодня") else: period = deadline - now print("Осталось {} дней".format(period.days))
НазадВперед
Clock ID Constants¶
These constants are used as parameters for and
.
-
Identical to , except it also includes any time that
the system is suspended.This allows applications to get a suspend-aware monotonic clock without
having to deal with the complications of , which may
have discontinuities if the time is changed using or
similar.: Linux 2.6.39 or later.
New in version 3.7.
-
The Solaris OS has a timer that attempts to use an optimal
hardware source, and may give close to nanosecond resolution.
is the nonadjustable, high-resolution clock.: Solaris.
New in version 3.3.
-
Clock that cannot be set and represents monotonic time since some unspecified
starting point.: Unix.
New in version 3.3.
-
Similar to , but provides access to a raw
hardware-based time that is not subject to NTP adjustments.: Linux 2.6.28 and newer, macOS 10.12 and newer.
New in version 3.3.
-
High-resolution per-process timer from the CPU.
: Unix.
New in version 3.3.
-
High-resolution per-process timer from the CPU.
: FreeBSD, NetBSD 7 or later, OpenBSD.
New in version 3.7.
-
The system must have a current leap second table in order for this to give
the correct answer. PTP or NTP software can maintain a leap second table.: Linux.
New in version 3.9.
-
Thread-specific CPU-time clock.
: Unix.
New in version 3.3.
-
Time whose absolute value is the time the system has been running and not
suspended, providing accurate uptime measurement, both absolute and
interval.: FreeBSD, OpenBSD 5.5 or later.
New in version 3.7.
-
Clock that increments monotonically, tracking the time since an arbitrary
point, unaffected by frequency or time adjustments and not incremented while
the system is asleep.: macOS 10.12 and newer.
New in version 3.8.
The following constant is the only parameter that can be sent to
.
What is TimeTuple?
Many of Python’s time functions handle time as a tuple of 9 numbers, as shown below −
Index | Field | Values |
---|---|---|
4-digit year | 2008 | |
1 | Month | 1 to 12 |
2 | Day | 1 to 31 |
3 | Hour | 0 to 23 |
4 | Minute | 0 to 59 |
5 | Second | 0 to 61 (60 or 61 are leap-seconds) |
6 | Day of Week | 0 to 6 (0 is Monday) |
7 | Day of year | 1 to 366 (Julian day) |
8 | Daylight savings | -1, 0, 1, -1 means library determines DST |
The above tuple is equivalent to struct_time structure. This structure has following attributes −
Index | Attributes | Values |
---|---|---|
tm_year | 2008 | |
1 | tm_mon | 1 to 12 |
2 | tm_mday | 1 to 31 |
3 | tm_hour | 0 to 23 |
4 | tm_min | 0 to 59 |
5 | tm_sec | 0 to 61 (60 or 61 are leap-seconds) |
6 | tm_wday | 0 to 6 (0 is Monday) |
7 | tm_yday | 1 to 366 (Julian day) |
8 | tm_isdst | -1, 0, 1, -1 means library determines DST |
Приемы использования модуля datetime.
В этом разделе представлены частые приемы работы с объектом даты и времени .
- ,
- ,
- ,
- .
- ,
- ,
- .
- ,
Получаем текущее время и дату.
>>> import datetime >>> dt = datetime.datetime.today() >>> dt # datetime.datetime(2020, 5, 5, 14, 56, 40, 902733) # получаем отдельные компоненты # даты >>> print(dt.year, dt.month, dt.day) # 2020 5 5 # времени >>> print(dt.hour, dt.minute, dt.second) # 14 56 40 # Получаем объект даты >>> dt.date() # atetime.date(2020, 5, 5) # Получаем объект времени >>> dt.time() # datetime.time(14, 56, 40, 902733)
Преобразуем объект в секунды ():
Задача: имеем объект , необходимо его преобразовать в секунды ().
>>> import datetime # Для преобразования получим объект `datetime`, # содержащий дату и время в настоящий момент >>> dt = datetime.datetime.now() >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5, 208688) # теперь получаем из `datetime` секунды - `timestamp` >>> second = dt.timestamp() >>> second # 1588762325.208688 # можно быстрее, одной строкой >>> second = datetime.datetime.now().timestamp() # 1588762325.208688 # если не нужны доли секунд, то # преобразуем в тип int >>> int(second) # 1588762325
Преобразуем время в секундах () в объект :
Задача: имеем время в секундах, необходимо из секунд получить объект , что бы потом что-то сделать.
>>> import datetime # имеем время в секундах second = 1588762325 # преобразовываем секунды в объект 'datetime' # его же методом '.timestamp()' >>> dt = datetime.datetime.fromtimestamp(second) >>> dt # datetime.datetime(2020, 5, 6, 13, 52, 5) # дальше работаем как с объектом # получаем строку >>> dt.strfptint('%d.%m.%Y %H:%M') # '06.05.2020 13:52' # через сколько новый год >>> future_dt = datetime.datetime.strptime('01.01.2021', '%d.%m.%Y') >>> delta = future_dt - dt # через дней >>> delta.days # 239 # секунд >>> delta.seconds # 36475 # месяцев >>> 239 // 30 # 7
Получить объект из отдельных объектов и :
>>> import datetime # дата >>> date = datetime.date.today() # время >>> time = datetime.time(23, 55) # интервал >>> delta = datetime.timedelta(minutes=30) # соединяем все вместе >>> datetime.datetime.combine(date, time) + delta # datetime.datetime(2020, 5, 6, 0, 25)
Форматирование вывода строки c датой и временем:
Полный список директив форматирования смотрите в разделе «Коды форматирования и модуля «.
>>> import datetime >>> dt = datetime.datetime.now() >>> dt.strftime('%H:%M - %m.%d.%Y года') # '09:56 - 05.06.2020 года' >>> dt.strftime('%H часов %M минут %m.%d.%Y года') # '09 часов 56 минут 05.06.2020 года' >>> dt.strftime('%m/%d/%y') # '05/06/20' >>> dt.strftime('%Y-%m-%d') # '2020-05-06' # форматирование даты при помощи функции format() >>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.' \ .format(dt, "day", "month", "time") 'The day is 06, the month is May, the time is 01:52PM.'
Преобразование строки с датой и временем в объект :
Полный список директив форматирования смотрите в разделе «Коды форматирования и модуля «.
>>> import datetime >>> date_str = 'Fri, 24 Apr 2021 16:22:54 +0000' >>> format = '%a, %d %b %Y %H:%M:%S +0000' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2021, 4, 24, 16, 22, 54) >>> date_str = '24.12.2020 16:22' >>> format = '%d.%m.%Y %H:%M' >>> datetime.datetime.strptime(date_str, format) # datetime.datetime(2020, 12, 24, 16, 22)
Сложение и вычитание даты и времени:
При вычитании дат получается объект продолжительности —
Подсчет дней до события.
>>> import datetime >>> today = datetime.datetime.now() >>> date = datetime.datetime(2020, 12, 6) >>> delta = date - today >>> delta.days # 213
Подсчет дней прошедших с события.
>>> import datetime >>> date = datetime.datetime(2019, 12, 31) >>> today = datetime.datetime.now() >>> delta = today - date >>> delta.days # 127
Узнать дату и время предстоящего или прошедшего события.
>>> import datetime >>> today = datetime.datetime.now() # узнаем, какая дата будет через 3 недели и 5 дней >>> delta = datetime.timedelta(weeks=3, days=5) >>> date = today + delta >>> date.day, date.month, date.year # (1, 6, 2020) # узнаем, какая дата была 100 дней назад >>> delta = datetime.timedelta(days=100) >>> date = today - delta >>> date.day, date.month, date.year # (27, 1, 2020) # узнаем, сколько время будет через 1 час 30 минут и 45 секунд >>> delta = datetime.timedelta(hours=1, minutes=30, seconds=45) >>> date = today + delta >>> date.hour, date.minute, date.second # (16, 18, 15)
Сравнение объектов :
- datetime1 считается меньше datetime2, когда datetime1 предшествует datetime2 во времени
- При сравнении c параметром не равным с , у которого параметром вызывается .
- При сравнений на равенство c параметром не равным никогда не будут равен , у которого параметром .
datetime.strptime() для преобразования строки в дату времени
В предыдущем уроке мы узнали как получить дату в строковом формате с помощью метода . Для получения объекта мы будем использовать метод для преобразования revere. и в этих двух методах означают и соответственно.
Метод анализирует входную строку с заданным форматом и возвращает объект .
Ниже приведен базовый пример использования этого метода ,
Результатом будет
Директивы кодов формата строк приведены здесь для справки.
Директива | Значение | Пример |
---|---|---|
День недели, как сокращенное название Местечка. | Sun, Mon, …, Sat (en_US);So, Mo, …, Sa (de_DE) | |
В будний день, как полное название местности. | Воскресенье, понедельник, …, суббота (en_US);Соннтаг, Монтаг, …, Самстаг (de_DE) | |
День недели в виде десятичного числа, где 0 — воскресенье и 6 — суббота. | 0, 1, …, 6 | |
День месяца в виде десятичного числа с нулевым знаком. | 01, 02, …, 31 | |
Месяц, как сокращенное название местности. | Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE) | |
Месяц, как полное название местности. | Январь, февраль, …, декабрь (en_US); Януар, февраль, …, Дезембер (de_DE). | |
Месяц в виде десятичного числа с нулевым знаком. | 01, 02, …, 12 | |
Год без столетия в виде десятичного числа с нулевым знаком. | 00, 01, …, 99 | |
Год с веком в качестве десятичного числа. | 0001, 0002, …, 2013, 2014, …, 9998, 9999 | |
Час (24-часовой) в виде десятичного числа с нулевым подстановочным знаком. | 00, 01, …, 23 | |
Час (12-часовой) в качестве десятичного числа с нулевым подстановочным знаком. | 01, 02, …, 12 | |
Локальный эквивалент либо АМ, либо ПМ. | AM, PM (en_US); am, pm (de_DE). | |
Минута в виде десятичного числа с нулевым знаком. | 00, 01, …, 59 | |
Второе в качестве десятичного числа с нулевым знаком. | 00, 01, …, 59 | |
Микросекунда в качестве десятичного числа, с нулевой накладкой слева. | 000000, 000001, …, 999999 | |
UTC-смещение в виде ±HHMMSS. | (пустая), +0000, -0400, +1030. | |
Имя часового пояса (пустая строка, если объект наивен). | (пустая), UTC, EST, CST. | |
День года в виде десятичного числа с нулевым знаком. | 001, 002, …, 366 | |
Номер недели года (воскресенье как первый день недели) в виде десятичного числа с нулевой подстановкой. Все дни в новом году, предшествующие первому воскресенью, считаются в неделю 0. | 00, 01, …, 53 | |
Номер недели года (понедельник как первый день недели) в виде десятичного числа. Все дни в новом году, предшествующие первому понедельнику, считаются в нулевой неделе. | 00, 01, …, 53 | |
Местное представительство по дате и времени. | Tue Aug 16 21:30:00 1988 (en_US);Di 16 Aug 21:30:00 1988 (de_DE) | |
Соответствующая дата представительства Локала. | 08/16/88 (нет);08/16/1988 (en_US);16.08.1988 (de_DE). | |
Соответствующее временное представительство Локала. | 21:30:00 (en_US);21:30:00 (de_DE) | |
Буквальный “%” персонаж. | % |
Measuring Performance
You can use to measure the performance of your program.
The way you do this is to use which, as the name suggests, provides a performance counter with a high resolution to measure short distances of time.
To use , you place a counter before your code begins execution as well as after your code’s execution completes:
>>>
First, captures the moment before you call the function. captures the moment after the function returns. The function’s total execution time took seconds.
Technical Detail: Python 3.7 introduced , which works the same as , but uses nanoseconds instead of seconds.
(or ) is the most precise way to measure the performance of your code using one execution. However, if you’re trying to accurately gauge the performance of a code snippet, I recommend using the Python module.
Что дает автору копирайт
Если знак копирайта не обладает юридической силой, зачем его ставить? Вероятно, таким вопросом задаются многие. На это есть две причины.
-
-
- Символ копирайта все же обладает силой предостережения: граждан, мечтающих увести ваш родной кусок текста или фотографию, станет значительно меньше.
- Если кто-то завладеет вашей интеллектуальной собственностью и сотрет знак авторского права, это будет считаться уже правонарушением, за которым следуют определенные санкции.
-
В некоторых странах, в частности, в США, указание неверной информации, касающейся права на интеллектуальную собственность, преследуется по закону.
Также следует помнить, что копирайт не является обязательным. Так, права на стихотворение возникают у автора в тот момент, когда написана заключительная строчка. Никаких прав регистрации собственности для этого не требуется.
Python 2 Example
from datetime import date from datetime import time from datetime import datetime def main(): ##DATETIME OBJECTS #Get today's date from datetime class today=datetime.now() #print today # Get the current time #t = datetime.time(datetime.now()) #print "The current time is", t #weekday returns 0 (monday) through 6 (sunday) wd = date.weekday(today) #Days start at 0 for monday days= print "Today is day number %d" % wd print "which is a " + days if __name__== "__main__": main()
# #Example file for formatting time and date output # from datetime import datetime def main(): #Times and dates can be formatted using a set of predefined string #Control codes now= datetime.now() #get the current date and time #%c - local date and time, %x-local's date, %X- local's time print now.strftime("%c") print now.strftime("%x") print now.strftime("%X") ##### Time Formatting #### #%I/%H - 12/24 Hour, %M - minute, %S - second, %p - local's AM/PM print now.strftime("%I:%M:%S %p") # 12-Hour:Minute:Second:AM print now.strftime("%H:%M") # 24-Hour:Minute if __name__== "__main__": main()
# # Example file for working with timedelta objects # from datetime import date from datetime import time from datetime import datetime from datetime import timedelta # construct a basic timedelta and print it print timedelta(days=365, hours=8, minutes=15) # print today's date print "today is: " + str(datetime.now()) # print today's date one year from now print "one year from now it will be:" + str(datetime.now() + timedelta(days=365)) # create a timedelta that uses more than one argument # print "in one week and 4 days it will be " + str(datetime.now() + timedelta(weeks=1, days=4)) # How many days until New Year's Day? today = date.today() # get todays date nyd = date(today.year, 1, 1) # get New Year Day for the same year # use date comparison to see if New Year Day has already gone for this year # if it has, use the replace() function to get the date for next year if nyd < today: print "New Year day is already went by %d days ago" % ((today - nyd).days)