Примеры работы с модулем datetime в python

Содержание:

datetime.timedelta

A object represents the difference between two dates or times.

Example 11: Difference between two dates and times

When you run the program, the output will be:


t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>

Notice, both t3 and t6 are of type.

Example 12: Difference between two timedelta objects

When you run the program, the output will be:


t3 = 14 days, 13:55:39

Here, we have created two objects t1 and t2, and their difference is printed on the screen.

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 method.

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 object by integers and floats.

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
.

Python format datetime

The way date and time is represented may be different in different places, organizations etc. It’s more common to use in the US, whereas is more common in the UK.

Python has and methods to handle this.

Example 15: Format date using strftime()

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, , , , etc. are format codes. The 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.

  • — year
  • — month
  • — day
  • — hour [00, 01, …, 22, 23
  • — minute
  • — second

To learn more about and format codes, visit: Python strftime().

Example 16: strptime()

When you run the program, the output will be:


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

The method takes two arguments:

  1. a string representing date and time
  2. format code equivalent to the first argument

By the way, , and format codes are used for day, month(full name) and year respectively.

Visit Python strptime() to learn more.

Поддерживаемые операции 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’ в виде вызова конструктора со значениями канонического атрибута.

Замечания:

  1. Это точно, но может быть переполнение.
  2. Это точно и не может быть переполнения.
  3. Деление на 0 поднимает [].
  4. не может быть представлен как объект .
  5. Строковые представления объектов нормализуются аналогично их внутреннему представлению. Это приводит к несколько необычным результатам для отрицательных .Например:

    >>> datetime.timedelta(days=-1, seconds=68400)
    >>> print(_)
    # -1 day, 19:00:00
    
  6. Выражение всегда будет равно выражению , кроме случаев, когда равно . В этом случае первое даст результат, а второе вызовет переполнение.

В дополнение к операциям, перечисленным выше, объекты поддерживают определенные дополнения и вычитания с объектами и . Смотрите «Частые приемы работы 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'

В булевых контекстах объект считается истинным тогда и только тогда, когда он не равен .

Python NumPy

NumPy IntroNumPy Getting StartedNumPy Creating ArraysNumPy Array IndexingNumPy Array SlicingNumPy Data TypesNumPy Copy vs ViewNumPy Array ShapeNumPy Array ReshapeNumPy Array IteratingNumPy Array JoinNumPy Array SplitNumPy Array SearchNumPy Array SortNumPy Array FilterNumPy Random
Random Intro
Data Distribution
Random Permutation
Seaborn Module
Normal Distribution
Binomial Distribution
Poisson Distribution
Uniform Distribution
Logistic Distribution
Multinomial Distribution
Exponential Distribution
Chi Square Distribution
Rayleigh Distribution
Pareto Distribution
Zipf Distribution

NumPy ufunc
ufunc Intro
ufunc Create Function
ufunc Simple Arithmetic
ufunc Rounding Decimals
ufunc Logs
ufunc Summations
ufunc Products
ufunc Differences
ufunc Finding LCM
ufunc Finding GCD
ufunc Trigonometric
ufunc Hyperbolic
ufunc Set Operations

Python strptime()

Python strptime() is a class method in datetime class. Its syntax is:

Both the arguments are mandatory and should be string. This function is exactly opposite of strftime() function, which converts datetime object to a string.

We have the similar function available in time module too, where its syntax is:

Here the function returns object. If format string is not provided, it defaults to “%a %b %d %H:%M:%S %Y” which matches the formatting returned by ctime() function.

If the input string cannot be parsed according to the provided format, then is raised. The exception message provides clear details about the issue in parsing.

Вариант 2: с предварительно определенной меткой времени

Иногда бывает так, что нам нужно отображать метку времени исторических наборов данных. То же самое можно сделать с помощью функции strftime().

Метод используется для получения предопределенной отметки времени. Кроме того, функция strftime() может использоваться для представления его в стандартной форме с использованием различных кодов формата, как объяснено выше.

Синтаксис:

datetime.fromtimestamp(timestamp).strftime()

Пример:

from datetime import datetime

given_timestamp = 124579923 
timestamp = datetime.fromtimestamp(given_timestamp)
tym = timestamp.strftime("%H:%M:%S")
date = timestamp.strftime("%d-%m-%Y")
print("Time according to the given timestamp:",tym)
print("Date according to the given timestamp:",date)

Выход:

Time according to the given timestamp: 03:02:03
Date according to the given timestamp: 13-12-1973

Работа с unix timestamp/time на python

Совсем недавно, я начал свое изучение python. Мне потребовалось несколько дней для того чтобы начать писать на нем элементарные вещи. И мне бы хотелось сохранять полезную информацию в виде своих заметок и для питон.

Как преобразовать unix timestamp в datetime на Python?

Делается это очень просто:

#!/bin/env python3

import datetime
timestamp = 1339521878.04
value = datetime.datetime.fromtimestamp(timestamp)
print(value.strftime('%Y-%m-%d %H:%M:%S'))

Чтобы получить datetime времени (сейчас), можно выполнить:

#!/bin/env python3

import datetime,time
dt = datetime.datetime.now()
value = datetime.datetime.fromtimestamp(time.mktime(dt.timetuple()))
print(value.strftime('%Y-%m-%d %H:%M:%S'))

Вывод будет следующим:

2017-08-04 14:25:21

Как преобразовать datetime в timestamp на Python?

Делается это очень просто:

#!/bin/env python3

from datetime import datetime
import time

# time tuple in local time to timestamp
time_tuple = (2017, 11, 12, 13, 59, 27, 2, 317, 0)
timestamp = time.mktime(time_tuple)
print (repr(timestamp))

# time tuple in utc time to timestamp
time_tuple_utc = (2017, 11, 12, 13, 59, 27, 2, 317, 0)
timestamp_utc = calendar.timegm(time_tuple_utc)
print (repr(timestamp_utc))

Конвертация в строку:

#!/bin/env python3

from datetime import datetime
import time

# datetime object to string
dt_obj = datetime(2017, 11, 10, 17, 53, 59)
date_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S")
print (date_str)

# time tuple to string
time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0)
date_str = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple)
print (date_str)

Конвертация в datetime:

#!/bin/env python3
from datetime import datetime
import time

# time tuple to datetime object
time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0)
dt_obj = datetime(*time_tuple)
print (repr(dt_obj))

# date string to datetime object
date_str = "2017-11-10 17:53:59"
dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print (repr(dt_obj))

# timestamp to datetime object in local time
timestamp = 1226527167.595983
dt_obj = datetime.fromtimestamp(timestamp)
print (repr(dt_obj))

# timestamp to datetime object in UTC
timestamp = 1226527167.595983
dt_obj = datetime.utcfromtimestamp(timestamp)
print (repr(dt_obj))

Получаем вывод:

datetime.datetime(2017, 11, 12, 13, 51, 18)
datetime.datetime(2017, 11, 10, 17, 53, 59)
datetime.datetime(2008, 11, 12, 23, 59, 27, 595983)
datetime.datetime(2008, 11, 12, 21, 59, 27, 595983)

Конвертация time tuples:

#!/bin/env python3

from datetime import datetime
import time

# datetime object to time tuple
dt_obj = datetime(2017, 11, 10, 17, 53, 59)
time_tuple = dt_obj.timetuple()
print (repr(time_tuple))

# string to time tuple
date_str = "2017-11-10 17:53:59"
time_tuple = time.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print (repr(time_tuple))

# timestamp to time tuple in UTC
timestamp = 1226527167.595983
time_tuple = time.gmtime(timestamp)
print (repr(time_tuple))

# timestamp to time tuple in local time
timestamp = 1226527167.595983
time_tuple = time.localtime(timestamp)
print (repr(time_tuple))

Получим вывод:

time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=-
1)
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=-
1)
time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=21, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0
)
time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=23, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0
)

Вот и все.

Операции с датами

Последнее обновление: 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))

НазадВперед

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
2
3
4
5
6
7
8
9
10
11
12

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
2
3
4
5
6
7

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
2
3
4
5
6
7
8
9

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.

Приемы использования модуля 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 параметром не равным никогда не будут равен , у которого параметром .

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.

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
.

Converting a Local Time Object to Seconds

You’ve already seen how to convert a UTC time object to seconds using . To convert local time to seconds, you’ll use .

requires you to pass a parameter called that takes the form of either a normal 9-tuple or a object representing local time:

>>>

It’s important to keep in mind that must be a tuple representing local time, not UTC:

>>>

Note: For this example, assume that the local time is .

This example shows why it’s important to use with local time, rather than UTC:

  1. with no argument returns a using UTC. shows . This is accurate because , so UTC should be 6 hours ahead of local time.

  2. tries to return the number of seconds, expecting local time, but you passed instead. So, instead of understanding that is UTC time, it assumes you meant .

  3. is then used to convert those seconds back into UTC, which results in an inconsistency. The time is now . The reason for this discrepancy is the fact that expected local time. So, the conversion back to UTC adds another 6 hours to local time.

Модуль datetime

Модуль содержит классы:

Также существует класс , который применяется для работы с часовыми поясами.

Класс datetime.date

Класс принимает три аргумента: год, месяц и день.

>>> import datetime
>>> date = datetime.date(2017, 4, 2)
>>> date.year
2017
>>> date.month
4
>>> date.day
2

Давайте посмотрим, какой сейчас день:

>>> today = datetime.date.today()
>>> today.year
2018
>>> today.month
4
>>> today.day
21

Класс datetime.datetime

Класс принимает аргументы: год, месяц, день, час, минута, секунда и микросекунда.

>>> date_time = datetime.datetime(2017, 4, 21, 13, 30, 10)
>>> date_time.year
2017
>>> date_time.month
4
>>> date_time.day
21
>>> date_time.hour
13
>>> date_time.minute
30
>>> date_time.second
10

Давайте посмотрим, какое сейчас время:

>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2018, 4, 21, 12, 43, 27, 786725)
>>> today.hour
12
>>> today.minute
43
>>> datetime.datetime.now() # местное время
datetime.datetime(2018, 4, 24, 13, 2, 39, 17479)
>>> datetime.datetime.utcnow() # время по Гринвичу
datetime.datetime(2018, 4, 24, 10, 2, 47, 46330)

Получить из объекта отдельно дату и отдельно время:

>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2018, 4, 21, 13, 26, 54, 387462)
>>> today.date() # отдельно дата
datetime.date(2018, 4, 21)
>>> today.time() # отдельно время
datetime.time(13, 26, 54, 387462)

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

>>> today = datetime.date.today().strftime("%d.%m.%Y")
>>> today
'21.04.2018'
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "ru") # задаем локаль для вывода даты на русском языке
'ru'
>>> today = datetime.datetime.today().strftime("%A, %d.%m.%Y")
>>> today
'суббота, 21.04.2018'
Сокращенное название дня недели
Полное название дня недели
Сокращенное название месяца
Полное название месяца
Дата и время
День месяца
24-часовой формат часа
12-часовой формат часа
День года. Цифровой формат
Номер месяца. Цифровой формат
Минута. Цифровой формат
До полудня или после (AM или PM)
Секунда. Цифровой формат
Номер недели в году. Цифровой формат (с воскресенья)
День недели. Цифровой формат
Номер недели в году. Цифровой формат (с понедельника)
Дата
Время
Год без века. Цифровой формат
Год с веком. Цифровой формат
Временная зона
Знак процента

Методы класса :

  • — объект из текущей даты и времени; работает также, как и со значением .
  • — объект из текущей даты и времени, местное время.
  • — объект из текущей даты и времени, по Гринвичу.
  • — дата из стандартного представления времени.
  • — дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
  • — объект из комбинации объектов и .
  • — преобразует строку в (так же, как и функция из модуля ).
  • — преобразует объект в строку согласно формату.
  • — объект даты (с отсечением времени).
  • — объект времени (с отсечением даты).
  • — возвращает новый объект с изменёнными атрибутами.
  • — возвращает из .
  • — количество дней, прошедших с 01.01.1970.
  • — возвращает время в секундах с начала эпохи Unix.
  • — день недели в виде числа, понедельник — 0, воскресенье — 6.
  • — день недели в виде числа, понедельник — 1, воскресенье — 7.
  • — кортеж (год в формате ISO, ISO номер недели, ISO день недели).
  • — красивая строка вида или, если ,
  • — возвращает строковое представление текущего местного времени.

Класс datetime.timedelta

Класс позволяет выполнять операции над датами — складывать, вычитать, сравнивать. Конструктор принимает именованные аргументы , , , , , , :

>>> delta = datetime.timedelta(days = 5, hours = 1, minutes = 1)
>>> delta
datetime.timedelta(5, 3660)

Интервал времени 5 дней, 1 час и 1 минута. Получить результат можно с помощью атрибутов , и (5 дней и 3660 секунд):

>>> delta.days
5
>>> delta.seconds
3660

Получить результат в секундах позволяет метод :

>>> today = datetime.datetime.today() # текущая дата
>>> today
datetime.datetime(2018, 4, 21, 15, 19, 2, 515432)
>>> future = datetime.datetime(2019, 4, 21, 15, 19, 2, 515432) # дата на один год больше
>>> delta = future - today
>>> delta
datetime.timedelta(365)
>>> delta.total_seconds() # 365 дней в секундах
31536000.0

Прибавить к текущей дате 10 дней, 10 часов и 10 минут:

>>> today = datetime.datetime.today()
>>> delta = datetime.timedelta(days = 10, hours = 10, minutes = 10)
>>> future = today + delta
>>> today # 21 апреля 2018 года, 15:29
datetime.datetime(2018, 4, 21, 15, 29, 29, 265954)
>>> future # 2 мая 2018 года, 01:39
datetime.datetime(2018, 5, 2, 1, 39, 29, 265954)

Python strftime()

  • Python datetime module strftime() function and time module strftime() function behaves exactly the same. However, their syntax is slightly different.

    Python datetime module strftime() function syntax is:

    Python time module strftime() function syntax is:

    This function converts a tuple or struct_time object to a string as specified by the format argument. If ‘time_object’ is not provided, the current time as returned by localtime() is used. The format argument must be a string.

  • For time objects (datetime.time()), the format codes for the year, month, and day should not be used, as time objects have no such values. If they’re used anyway, 1900 is substituted for the year, and 1 for the month and day.
  • For date objects (datetime.date()), the format codes for hours, minutes, seconds, and microseconds should not be used, as date objects have no such values. If they’re used anyway, 0 is substituted for them.

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.

Добавить комментарий

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

Adblock
detector