Руководство Python Date Time

1- Обзор

Python дает вам 4 модуля, связанных с датой и временем.
Модуль Описание
time time это модуль включаиющий только функции и константы связанные с датой и временем, не имеет класса (class), который определен в данном модуле.
datetime Этот модуль определяет класс представляющий дату и время.
calendar Этот модуль содержит функции связанные с календарем. Он так же определяет класс представляющий Календарь, и связанные исключения
locale Этот модуль содержит функции использующиеся для форматирования (format), или парсирования (parse) даты и времени на основании locale (регион, география).

datetime module:

datetime это модуль, смоделирован на основании направления объекта (object oriented), чтобы работать с датой и временем в Python. Он имеет несколько классов, предствляющих дату и время.
Класс Описание
datetime.date Объект date представляет дату (date), не включая время, по календарю Gregorian (Грегорианский календарь).
datetime.datetime Объект datetime представляет дату (date) и время, по календарю Gregorian.
datetime.time Объект time представляет время (time), не включая дату (date).
datetime.tzinfo Это базовый абстрактный класс (base abstract class) для объектов информации часового пояса (timezone).
datetime.timezone Это прямой подкласс класса tzinfo, по стандарту UTC (Coordinated Universal Time) (Всемирное координированное время).
datetime.timedelta Объект timedelta описывает период времени (duration), это период между 2-мя моментами.

calendar module:

calendar это модуль предоставляющий функции, и некоторые классы связанные с Календарем, помогает генерировать (generate) изображения календаря формата text, html, ....

2- Понятие о Ticks

В компьютерной сфере 12:00 дня, 1 января 1970 года - это особенное время, которое используется для начала отсчета времени. Этот особенный момент, называется  epoch (компьютерная эпоха)
В Python, время между настоящим моментом и особенным временем, упомянутоое выше, выражается в секундах. Такой временной период называется Ticks.
Функция time() в модуле time возвращает количество секунд (seconds) с момента 12.00, 1 января 1970 года до настоящего времени. Она возвращает тип с плавающей точкой (floating point).
ticketExample.py
# Импортировать module time.
import time;

# Количество секунд считая с 12 часов утра 1-1-1970 до данного момента.
ticks = time.time()


print ("Number of ticks since 12:00am, January 1, 1970: ", ticks)

3- time module

time представляет собой модуль включает в себя только функции и константы, связанные с датой и временем,имеет несколько классов (class), написанных на C/C++ и определены на этом модуле, как например класс struct_time.
На модуле time, Время представлено с помощью  Ticks или struct_time. Он содержит функции для форматирования (format) Ticks или struct_time, чтобы сформировать string; и парсирование (parse), string, чтобы сформировать Ticks или struct_time.
Index Attribute Values
0 tm_year (for example, 1993)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]; See more below
6 tm_wday range [0, 6], Monday is 0
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 or -1; see below
N/A tm_zone abbreviation of timezone name
N/A tm_gmtoff offset east of UTC in seconds
tm_sec
Рамка секунд на самом деле (second) от 0 до 61; это объясняется, как секунда координации (double leap seconds), хотя это очень редко.
Фунции time вызывают функции написанные на языке С. Ниже приведён список наиболее распространенных функций, просмотрите офицальный сайт Python для более подробной информации.

Ticks ==> struct_time

Функция Описание           
time.gmtime ([сек]) Конвертирует время, отсчитанное с момента spoch в struct_time, в формате UTC, где dst флаг является 0. Если параметр secs не предоставлен или None, то он имеет значение по-умолчанию,возвращаемое функцией time().
time.localtime ([сек]) Похожа на функцию gmtime(), но конвертирует в местное время (local time). А флаг dst имеет значение 1.
Функция  gmtime([secs]) и  localtime([secs]) оба возвращают тип  struct_time.
time_gmtimeExample.py
import time

# 1 секунда после компьютерной эпохи (epoch).
# Данная функция возвращает один вид struct: struct_time
ts = time.gmtime(1)

print ("1 seconds after epoch: ")

print (ts)


print ("\n")

# Данный момент, похож на time.gmtime( time.time() )
# Данная функция возвращает вид struct: struct_time
ts = time.gmtime()


print ("struct_time for current time: ")
print (ts)

struct_time ==> Ticks

Вы можете конвертировать struct_time или Tuple,  представляющие время, в Ticks (количество секунд считая с момента  epoch).
time_mktime_example.py
import time

a_struct_time = time.localtime()

print ("Current time as struct_time: ");
print (a_struct_time)

# Конвертировать struct_time или Tuple в Ticks.
ticks = time.mktime(a_struct_time)


print ("Ticks: ", ticks)

# Один Tuple имеет 9 элементов.
aTupleTime = ( 2017, 4, 15, 13, 5, 34, 0, 0, 0)

print ("\n")
print ("A Tuple represents time: ")
print (aTupleTime)

# Конвертировать struct_time или Tuple в Ticks.
ticks = time.mktime(aTupleTime)

print ("Ticks: ", ticks)

struct_time, Ticks ==> string

Функция Описание
time.asctime([struct_t]) Конвертирует tuple или struct_time представляющее время как возвращаемое gmtime() или localtime() в string в следующей форме: 'Sun Jun 20 23:21:05 1993'. Если параметр struct_t не предоставлен, текущее время возвращенное с помощью  localtime() будет использовано. Локальная информация (locale) не используется asctime().
time.ctime([secs]) Конвертирует время посекундно (seconds) со времени epoch в string представляющее локальное время (local time). Если параметр secs не предоставлен или None, текущее время возвращенное с помощью time() будет использовано. ctime(secs) эквивалентно asctime(localtime(secs)). Локальная информация (locale) не используется​​​​​​​ ctime().
time_asctime_ctime_example.py
import time
 
# Tuple с 9-ю элементами.
# (Year, month, day, hour, minute, second, wday, yday, isdst)
a_tuple_time = (2017, 4, 15 , 22 , 1, 29, 0, 0, 0)

a_timeAsString = time.asctime(a_tuple_time)

print ("time.asctime(a_tuple_time): ", a_timeAsString)


a_struct_time = time.localtime()
print ("a_struct_time: ", a_struct_time)

a_timeAsString = time.asctime(a_struct_time)

print ("time.asctime(a_struct_time): ", a_timeAsString)

# Количество секунд, считая от 12.00 утра 1-1-1970 до текущего времени.
ticks = time.time()

a_timeAsString = time.ctime(ticks)


print ("time.ctime(ticks): ", a_timeAsString)

Парсирование и форматирование

module time предоставляет некоторые функции использующиеся для парсирования (parse) string во время. И наоборот, форматирует (format) время в string.
Функция Описание
time.strptime(string[, format] ) Парсирует string представляющий время по формату. Возвращает struct_time как возвращается функцией gmtime() или localtime().
time.strftime(format [, t] ) Конвертирует Tuple или struct_time, представляющее время, как возвращается функцией gmtime() или localtime() в string, определенный параметром format. Если он не предоставлен, текущее время возвращенное с помощью localtime() будет использовано. Параметр format должен являться string. ValueError может быть выброшен (throw) если определенное поле (field) в параметре 't' находится вне разрешаемой рамки.
Пример парсирования (parse) string во время вида  struct_time.
time_strptime_example.py
import time

# String представляет время.
aStringTime = "22-12-2007 23:30:59"


a_struct_time = time.strptime(aStringTime, "%d-%m-%Y %H:%M:%S")

print ("a_struct_time:")

print (a_struct_time)
Смотрите так же module time:

4- datetime module

datetime это модуль, смоделированный как объектно-ориентированный для работы с датой и временем в Python. Он определяет несколько классов, представляющих дату и время.
Класс Описание
datetime.date Объект date представляет дату (date), не включая время, по календарю Gregorian.
datetime.datetime Объект datetime представляет дату (date) и время, по календарю Gregorian.
datetime.time Объект time представляет время (time), не включая дату (date).
datetime.tzinfo Это базовый абстрактный класс(base abstract class) для объектов с информацией часового пояса.
datetime.timezone Это прямой подкласс класса tzinfo, по стандарту UTC (Coordinated Universal Time) (Всемирное координированное время).
datetime.timedelta Объект timedelta представляет период, разница между двумя датами или временем.

5- datetime.timedelta

timedelta это класс, находящийся в модуле  datetime, описывает промежуток времени. Является разницей между 2 периодами времени.
Класс  timedelta имеет 7 атрибутов (attribute), все имеют значение по умолчанию это 0.
Attribute Attribute Range
days   -999999999 : 999999999
seconds   0 : 86399
microseconds 1 seconds = 1000,000 microseconds 0 : 999999
milliseconds 1 seconds = 1000 milliseconds  
minutes    
hours    
weeks    
Операторы:
Operation Example
t1 = t2 + t3 t2 = (hours = 10, seconds= 2)
t3 = (hours = 1, minutes = 3)
--> t1 = (hours= 11, minutes = 3, seconds = 2)
t1 = t2 - t3 t2 = (hours = 10, seconds= 2)
t3 = (hours = 1, minutes = 3)
--> t1 = (hours= 8, minutes = 57, seconds = 2)
t1 = t2 * i
t1 = i * t2
t2 = (hours = 10, seconds= 2)
i = 3
--> t1 = (days =1, hours = 6, seconds= 6)
   
t1 = t2 t2 = (hours = 25, seconds= 2)
--> t1 = (days: 1, hours: 1, seconds: 2)
+t1 return t1
-t1 t1 = (hours = 10, seconds= 2)
--> -t1 = (days = -1, hours = 13, minutes = 59, seconds= 58)
abs(t) Absolute value, equivalent to + t when t.days> = 0, and is -t when t.days <0.
t = (hours= -25, minutes = 3)
--> t = (days =  -2, hours = 23, minutes = 3)
--> abs(t) = (days =  1, hours = 0, minutes = 57)
str(t) Returns the string in the form [D day [s],] [H] H: MM: SS [.UUUUUU], D can get negative value.
repr(t) Returns a string in the form datetime.timedelta (D [, S [, U]]), D can get negative value

6- datetime.date

datetime.date это класс, его объект представляет дату (date), не включая информацию времени

Constructor

** constructor **
# MINYEAR <= year <= MAXYEAR
# 1 <= month <= 12
# 1 <= day <= количество дней данные year (годом) и month (месяцем).
date (year, month, day)
Конструктор класса  date может дать ошибку  ValueError если переданные значения не являются действительными (вне позволенной рамки).

Константы:

Константы Описание
date.min Представляет первый день в рамках класса date, date(MINYEAR, 1, 1).
date.max Представляет последний день в рамках класса date, date(MAXYEAR, 12, 31).
date.resolution Малейшая разница между неравными объектами date, timedelta(days=1).

операторы:

Оператор Описание
date2 = date1 + timedelta Прибавляет промежуток времени, timedelta
date2 = date1 - timedelta Убавляет промежуток времени, timedelta
timedelta = date1 - date2 Убавляет два объекта date.
date1 < date2 Сравнивает два объекта date.

Методы:

Method Description
date.replace(year=self.year, month=self.month, day=self.day) Return a date with the same value, except for the value replaced by the parameter.

For example:
d == date(2002, 12, 31), d.replace(day=26) == date(2002, 12, 26).
date.timetuple() Return a time.struct_time such as returned by time.localtime(). The hours, minutes and seconds are 0, and the DST flag is -1.

d.timetuple() is equivalent to time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1)), where yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1 is the day number within the current year starting with 1 for January 1st.
date.toordinal() Return the proleptic Gregorian ordinal of the date, where January 1 of year 1 has ordinal 1.

For any date object d, date.fromordinal(d.toordinal()) == d.
date.weekday() Return the day of the week as an integer, where Monday is 0 and Sunday is 6.

For example, date(2002, 12, 4).weekday() == 2, a Wednesday. See also isoweekday().
date.isoweekday() Return the day of the week as an integer (According to ISO standard), where Monday is 1 and Sunday is 7.

For example, date(2002, 12, 4).isoweekday() == 3, a Wednesday. See also weekday(), isocalendar().
date.isocalendar() Return a 3-tuple, (ISO year, ISO week number, ISO weekday).
date.isoformat() Return a string representing the date in ISO 8601 format, ‘YYYY-MM-DD’.

For example, date(2002, 12, 4).isoformat() == '2002-12-04'.
date.__str__() For a date d, str(d) is equivalent to d.isoformat().
date.ctime() Return a string representing the date, for example date(2002, 12, 4).ctime() == 'Wed Dec 4 00:00:00 2002'.

d.ctime() is equivalent to time.ctime(time.mktime(d.timetuple())). The native C ctime() function conforms to the C standard when it run on flatform.
date.strftime(format) Return a string representing the date, In the format given by the parameter. Format codes referring to hours, minutes or seconds will see 0 values.

See more strftime() and strptime() function of time module.
date.__format__(format) Same as date.strftime()