matplotlib.dates
Matplotlib предоставляет расширенные возможности построения графиков дат, опираясь на возможности модуля python datetime и модуля dateutil.
Формат дат в Matplotlib
Matplotlib представляет даты с помощью чисел с плавающей точкой, указывающих количество дней с 0001-01-01 UTC плюс 1. Например, 0001-01-01 06:00 соответствует 1.25, а не 0.25. Значения < 1, то есть даты до 0001-01-01 UTC, не поддерживаются.
Существует ряд вспомогательных функций для преобразования между объектами datetime и датами Matplotlib:
datestr2num | Преобразует строку даты в datenum, используя dateutil.parser.parse(). |
date2num | Преобразует объекты datetime в даты Matplotlib. |
num2date | Преобразует даты Matplotlib в объекты datetime. |
num2timedelta | Преобразует количество дней в объект timedelta. |
epoch2num | Преобразует эпоху или последовательность эпох в новый формат даты, то есть количество дней с 0001. |
num2epoch | Преобразует количество дней с 0001 в эпоху. |
mx2num | Преобразует экземпляр mx (или последовательность экземпляров mx) в новый формат даты. |
drange | Возвращает последовательность равномерно распределённых дат Matplotlib. |
Примечание
Как и в Python datetime, mpl использует григорианский календарь для всех преобразований между датами и числами с плавающей точкой. Эта практика не является универсальной, и различия в календарях могут привести к путанице между тем, что Python и mpl дают как число дней с 0001-01-01 и тем, что дают другие программы и базы данных. Например, US Naval Observatory использует календарь, который переключается с юлианского на григорианский в октябре 1582 года. Таким образом, используя их калькулятор, количество дней между 0001-01-01 и 2006-04-01 равно 732403, в то время как использование григорианского календаря через модуль datetime даёт:
In [1]: date(2006, 4, 1).toordinal() - date(1, 1, 1).toordinal() Out[1]: 732401
Все преобразователи, метки и форматировщики дат Matplotlib учитывают часовые пояса. Если явный часовой пояс не указан, используется значение rcParam timezone. Если вы хотите использовать пользовательский часовой пояс, передайте экземпляр datetime.tzinfo с параметром tz в num2date(), plot_date() и любых пользовательских метках или локаторах дат.
В этом модуле предоставляется широкий спектр специфических и общих локаторов и форматировщиков меток дат. См. matplotlib.ticker для общей информации о локаторах и форматировщиках меток. Они описаны ниже.
Модуль dateutil предоставляет дополнительный код для обработки меток дат, что упрощает размещение меток на любых датах. См. примеры ниже.
Локаторы меток дат
Большинство локаторов меток дат могут определять одно или несколько значений. Например:
# import constants for the days of the week from matplotlib.dates import MO, TU, WE, TH, FR, SA, SU # tick on mondays every week loc = WeekdayLocator(byweekday=MO, tz=tz) # tick on mondays and saturdays loc = WeekdayLocator(byweekday=(MO, SA))
Кроме того, большинство конструкторов принимают аргумент интервала:
# tick on mondays every second week loc = WeekdayLocator(byweekday=MO, interval=2)
Локатор rrule позволяет полностью указать интервал меток дат:
# tick every 5th easter rule = rrulewrapper(YEARLY, byeaster=1, interval=5) loc = RRuleLocator(rule)
Вот все локаторы меток дат:
-
MicrosecondLocator: определение микросекунд -
SecondLocator: определение секунд -
MinuteLocator: определение минут -
HourLocator: определение часов -
DayLocator: определение указанных дней месяца -
WeekdayLocator: Определение дней недели, например, ПОН, ВТО -
MonthLocator: определение месяцев, например, 7 для июля -
YearLocator: определение лет, кратных основанию -
RRuleLocator: определение с помощьюmatplotlib.dates.rrulewrapper.rrulewrapperявляется простой обёрткой над dateutil'sdateutil.rrule, позволяющей задавать почти любые метки дат. См. пример rrule. -
AutoDateLocator: при автоматическом масштабировании этот класс выбирает лучший локаторDateLocator(например,RRuleLocator) для установки пределов просмотра и расположения меток. Если вызван сinterval_multiples=True, он расположит метки с разумными кратными интервалам. Например, если интервал составляет 4 часа, он выберет часы 0, 4, 8 и т.д. в качестве меток. Это поведение не гарантируется по умолчанию.
Форматировщики меток дат
Вот все форматировщики меток дат:
-
AutoDateFormatter: пытается определить лучший формат для использования. Это наиболее полезно при использовании сAutoDateLocator. -
ConciseDateFormatter: также пытается определить лучший формат для использования и сделать формат максимально компактным, сохраняя при этом полную информацию о дате. Это наиболее полезно при использовании сAutoDateLocator. -
DateFormatter: использоватьstrftime()строки формата -
IndexDateFormatter: графики дат с неявным индексированием x.
-
matplotlib.dates.datestr2num(d, default=None)[исходный код] -
Преобразование строки даты в datenum с использованием
dateutil.parser.parse().Параметры: -
d : string or sequence of strings -
Даты для преобразования.
-
default : datetime instance, optional -
По умолчанию дата для использования, когда поля отсутствуют в d.
-
-
matplotlib.dates.date2num(d)[исходный код] -
Преобразование объектов datetime в даты Matplotlib.
Параметры: -
d : datetime.datetime or numpy.datetime64 or sequences of these
Возвращает: - число с плавающей точкой или последовательность чисел с плавающей точкой
-
Количество дней (дробная часть представляет часы, минуты, секунды, мс) с 0001-01-01 00:00:00 UTC, плюс один.
Примечания
Добавление единицы здесь является историческим артефактом. Также обратите внимание, что используется григорианский календарь; это не универсальная практика. Подробности см. в строке документации модуля.
-
-
matplotlib.dates.num2date(x, tz=None)[исходный код] -
Преобразование дат Matplotlib в объекты
datetime.Параметры: -
x : float or sequence of floats -
Количество дней (дробная часть представляет часы, минуты, секунды) с 0001-01-01 00:00:00 UTC, плюс один.
-
tz : string, optional -
Временная зона x (по умолчанию rcparams
timezone).
Возвращает: -
datetime or sequence ofdatetime -
Даты возвращаются во временной зоне tz.
Если x является последовательностью, будет возвращена последовательность объектов
datetime.
Примечания
Добавление единицы здесь является историческим артефактом. Также обратите внимание, что используется григорианский календарь; это не универсальная практика. Подробности см. в строке документации модуля.
-
-
matplotlib.dates.num2timedelta(x)[исходный код] -
Преобразование числа дней в объект
timedelta.Если x является последовательностью, будет возвращена последовательность объектов
timedelta.Параметры: -
x : float, sequence of floats -
Количество дней. Дробная часть представляет часы, минуты, секунды.
Возвращает: -
datetime.timedelta or list[datetime.timedelta]
-
-
matplotlib.dates.drange(dstart, dend, delta)[исходный код] -
Возвращает последовательность равномерно распределенных дат Matplotlib.
Даты начинаются с dstart и доходят до, но не включая dend. Они распределены с шагом delta.
Параметры: -
dstart, dend : datetime -
Границы дат.
-
delta : datetime.timedelta -
Шаг между датами.
Возвращает: -
drange : numpy.array -
Список чисел с плавающей точкой, представляющих даты Matplotlib.
-
-
matplotlib.dates.epoch2num(e)[исходный код] -
Преобразование эпохи или последовательности эпох в новый формат даты, то есть количество дней с 0001.
-
matplotlib.dates.num2epoch(d)[исходный код] -
Преобразование дней с 0001 в эпоху. d может быть числом или последовательностью.
-
matplotlib.dates.mx2num(mxdates)[исходный код] -
Преобразование экземпляра mx
datetime(или последовательности экземпляров mx) в новый формат даты.
-
class matplotlib.dates.DateFormatter(fmt, tz=None)[исходный код] -
Базовые классы:
matplotlib.ticker.FormatterФорматирование отметки (в секундах с начала эпохи) с помощью строки формата
strftime.Параметры: -
fmt : str -
Строка формата
strftime -
tz : tzinfo
-
illegal_s = re.compile('((^|[^%])(%%)*%s)')
-
set_tzinfo(self, tz)[исходный код]
-
strftime(self, dt, fmt=None)[исходный код] -
[Устаревшее] См. документацию по
datetime.datetime.strftime()fmt — это строка формата
datetime.datetime.strftime().Предупреждение: Для лет до 1900 года, в зависимости от текущего языка, возможно, что год, отображаемый с помощью %x, будет неверным. Для лет до 100 %y и %Y будут давать заполненные нулями строки.
Примечания
Устарело начиная с версии 3.0.
-
strftime_pre_1900(self, dt, fmt=None)[исходный код] -
[Устаревшее] Вызов time.strftime для лет до 1900 года путем сдвига вперед на кратное 28 лет.
fmt — это строка формата
strftime().Dalke: Надеюсь, я правильно произвел эти вычисления. Календарь повторяется каждые 28 лет, за исключением високосных лет столетия, за исключением високосных лет 400-летнего цикла. Но только если вы используете григорианский календарь.
Примечания
Устарело начиная с версии 3.0.
-
-
class matplotlib.dates.ConciseDateFormatter(locator, tz=None, formats=None, offset_formats=None, zero_formats=None, show_offset=True)[исходный код] -
Базовые классы:
matplotlib.ticker.FormatterЭтот класс пытается определить лучший формат для даты и сделать его максимально компактным, но при этом полным. Это наиболее полезно при использовании с
AutoDateLocator:>>> locator = AutoDateLocator() >>> formatter = ConciseDateFormatter(locator)
Параметры: -
locator : ticker.Locator -
Локатор, используемый этой осью.
-
tz : string, optional -
Передаётся в
dates.date2num. -
formats : list of 6 strings, optional -
Строки формата для 6 уровней метки делений: в основном годы, месяцы, дни, часы, минуты и секунды. Строки используют те же коды формата, что и
strftime. Значение по умолчанию —['%Y', '%b', '%d', '%H:%M', '%H:%M', '%S.%f'] -
zero_formats : list of 6 strings, optional -
Строки формата для меток делений, которые являются «нулями» для данного уровня деления. Например, если большинство делений — месяцы, деления около 1 января 2005 года будут помечены «дек», «2005», «фев». Значение по умолчанию —
['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M'] -
offset_formats : list of 6 strings, optional -
Строки формата для 6 уровней, которые применяются к строке «смещения», расположенной справа на оси x или сверху на оси y. В сочетании с метками делений это должно полностью указать дату. По умолчанию:
['', '%Y', '%Y-%b', '%Y-%b-%d', '%Y-%b-%d', '%Y-%b-%d %H:%M']
-
show_offset : bool -
Показывать ли смещение. Значение по умолчанию —
True.
Примеры
См. Форматирование меток делений даты с помощью ConciseDateFormatter
(Исходный код, png, pdf)
Автоматическое форматирование меток даты. Значение по умолчанию используется для формирования начальной строки, а затем удаляются избыточные элементы.
-
format_data_short(self, value)[исходный код] -
Возвращает короткую строковую версию значения деления.
По умолчанию используется длинное значение, независимое от позиции.
-
format_ticks(self, values)[исходный код] -
Возвращает метки делений для всех делений сразу.
-
get_offset(self)[исходный код]
-
-
class matplotlib.dates.IndexDateFormatter(t, fmt, tz=None)[исходный код] -
Базовые классы:
matplotlib.ticker.FormatterИспользуйте с
IndexLocatorдля циклического форматирования строк по индексу.t — последовательность дат (числа с плавающей точкой дней). fmt —
strftime()строка формата.
-
class matplotlib.dates.AutoDateFormatter(locator, tz=None, defaultfmt='%Y-%m-%d')[исходный код] -
Базовые классы:
matplotlib.ticker.FormatterЭтот класс пытается определить лучший формат. Это наиболее полезно при использовании с
AutoDateLocator.У AutoDateFormatter есть словарь масштабов, который сопоставляет масштаб деления (расстояние в днях между основными делениями) и строку формата. Значение по умолчанию выглядит так:
self.scaled = { DAYS_PER_YEAR: rcParams['date.autoformat.year'], DAYS_PER_MONTH: rcParams['date.autoformat.month'], 1.0: rcParams['date.autoformat.day'], 1. / HOURS_PER_DAY: rcParams['date.autoformat.hour'], 1. / (MINUTES_PER_DAY): rcParams['date.autoformat.minute'], 1. / (SEC_PER_DAY): rcParams['date.autoformat.second'], 1. / (MUSECONDS_PER_DAY): rcParams['date.autoformat.microsecond'], }Алгоритм выбирает ключ в словаре, который больше или равен текущему масштабу, и использует эту строку формата. Вы можете настроить этот словарь следующим образом:
>>> locator = AutoDateLocator() >>> formatter = AutoDateFormatter(locator) >>> formatter.scaled[1/(24.*60.)] = '%M:%S' # only show min and sec
Также можно использовать пользовательскую функцию
FuncFormatter. Следующий пример показывает, как использовать пользовательскую функцию формата для удаления конечных нулей из десятичных секунд и добавления даты к первой метке деления:>>> def my_format_function(x, pos=None): ... x = matplotlib.dates.num2date(x) ... if pos == 0: ... fmt = '%D %H:%M:%S.%f' ... else: ... fmt = '%H:%M:%S.%f' ... label = x.strftime(fmt) ... label = label.rstrip("0") ... label = label.rstrip(".") ... return label >>> from matplotlib.ticker import FuncFormatter >>> formatter.scaled[1/(24.*60.)] = FuncFormatter(my_format_function)Автоматическое форматирование меток даты. Значение по умолчанию — то, которое нужно использовать, если ни одно из значений в
self.scaledне больше единицы, возвращаемойlocator._get_unit().
-
class matplotlib.dates.DateLocator(tz=None)[исходный код] -
Базовый класс:
matplotlib.ticker.LocatorОпределяет расположение делений при построении графиков дат.
Этот класс наследуется другими локаторами и не предназначен для самостоятельного использования.
tz — экземпляр
tzinfo.-
datalim_to_dt(self)[исходный код] -
Преобразует интервал данных оси в объекты datetime.
-
hms0d = {'byhour': 0, 'byminute': 0, 'bysecond': 0}
-
nonsingular(self, vmin, vmax)[исходный код] -
Корректирует заданные верхний и нижний пределы, если диапазон слишком близок к вырожденному (то есть диапазон составляет примерно 0).
-
set_tzinfo(self, tz)[исходный код] -
Устанавливает информацию о часовом поясе.
-
viewlim_to_dt(self)[исходный код] -
Преобразует интервал просмотра в объекты datetime.
-
-
class matplotlib.dates.RRuleLocator(o, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.DateLocator-
autoscale(self)[исходный код] -
Устанавливает пределы просмотра, включая диапазон данных.
-
static get_unit_generic(freq)[исходный код]
-
tick_values(self, vmin, vmax)[исходный код] -
Возвращает значения делений, заданные параметрами vmin и vmax.
Примечание
Чтобы получить значения делений с автоматически определёнными vmin и vmax для соответствующего
axis, просто вызовите экземпляр локатора:>>> print(type(loc)) <type 'Locator'> >>> print(loc()) [1, 2, 3, 4]
-
-
class matplotlib.dates.AutoDateLocator(tz=None, minticks=5, maxticks=None, interval_multiples=True)[исходный код] -
Базовый класс:
matplotlib.dates.DateLocatorПри автоматическом масштабировании этот класс выбирает оптимальный
DateLocatorдля определения пределов отображения и расположения делений.minticks — минимальное количество делений, используемое для выбора типа делений (годовые, ежемесячные и т. д.).
maxticks — максимальное количество делений, которое определяет интервалы между делениями (каждое второе, каждое третье и т. д.). Для более точного управления можно передать словарь, сопоставляющий отдельные константы частоты rrule (YEARLY, MONTHLY и т. д.) с соответствующим максимальным количеством делений. Это позволяет поддерживать подходящее количество делений для формата, выбранного в
AutoDateFormatter. Для частот, не указанных в словаре, используется значение по умолчанию.tz — объект
tzinfo.interval_multiples — логическое значение, указывающее, должны ли деления располагаться на кратных интервалах. Это позволит закрепить деления на «более удобных» позициях. Например, при разметке часов с интервалом 6 часов деления будут установлены на 0, 6, 12 и 18 часов.
AutoDateLocator содержит словарь интервалов, сопоставляющий частоту делений (константу из dateutil.rrule) с допустимыми кратными значениями. По умолчанию словарь выглядит так:
self.intervald = { YEARLY : [1, 2, 4, 5, 10, 20, 40, 50, 100, 200, 400, 500, 1000, 2000, 4000, 5000, 10000], MONTHLY : [1, 2, 3, 4, 6], DAILY : [1, 2, 3, 7, 14], HOURLY : [1, 2, 3, 4, 6, 12], MINUTELY: [1, 5, 10, 15, 30], SECONDLY: [1, 5, 10, 15, 30], MICROSECONDLY: [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000], }Интервал используется для указания подходящих кратных значений для частоты делений. Например, для ежедневных делений подходит интервал в 7 дней, а для минут и секунд разумными значениями будут 15 или 30. Этот словарь можно настроить следующим образом:
locator = AutoDateLocator() locator.intervald[HOURLY] = [3] # only show every 3 hours
-
autoscale(self)[исходный код] -
Пытается разумным образом выбрать пределы отображения.
-
get_locator(self, dmin, dmax)[исходный код] -
Выбирает лучший локатор на основе диапазона.
-
nonsingular(self, vmin, vmax)[исходный код] -
Корректирует предлагаемые верхний и нижний пределы, если диапазон слишком близок к вырожденному (то есть диапазон составляет примерно 0).
-
refresh(self)[исходный код] -
Обновляет внутреннюю информацию на основе текущих пределов.
-
set_axis(self, axis)[исходный код]
-
tick_values(self, vmin, vmax)[исходный код] -
Возвращает значения делений с учётом vmin и vmax.
Примечание
Чтобы получить расположение делений с автоматически заданными vmin и vmax для соответствующего
axis, просто вызовите экземпляр локатора:>>> print(type(loc)) <type 'Locator'> >>> print(loc()) [1, 2, 3, 4]
-
-
class matplotlib.dates.YearLocator(base=1, month=1, day=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.DateLocatorСоздаёт деления в заданный день каждого года, кратного основанию.
Примеры:
# Tick every year on Jan 1st locator = YearLocator() # Tick every 5 years on July 4th locator = YearLocator(5, month=7, day=4)
Помечает годы, кратные основанию, в заданный месяц и день (по умолчанию — 1 января).
-
autoscale(self)[исходный код] -
Устанавливает пределы отображения так, чтобы они включали диапазон данных.
-
tick_values(self, vmin, vmax)[исходный код] -
Возвращает значения делений с учётом vmin и vmax.
Примечание
Чтобы получить расположение делений с автоматически заданными vmin и vmax для соответствующего
axis, просто вызовите экземпляр локатора:>>> print(type(loc)) <type 'Locator'> >>> print(loc()) [1, 2, 3, 4]
-
-
class matplotlib.dates.MonthLocator(bymonth=None, bymonthday=1, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления в указанные дни каждого месяца, например 1, 3, 12.
Помечает каждый месяц, указанный в bymonth; bymonth может быть целым числом или последовательностью. По умолчанию
range(1,13), то есть каждый месяц.interval — интервал между повторениями. Например, если
interval=2, отмечается каждое второе повторение.
-
class matplotlib.dates.WeekdayLocator(byweekday=1, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления для каждого дня недели.
Помечает дни недели, указанные в byweekday; byweekday может быть числом или последовательностью.
Элементы byweekday должны быть одним из значений MO, TU, WE, TH, FR, SA, SU — констант из
dateutil.rrule, импортированных в пространство имёнmatplotlib.dates.interval задаёт количество пропускаемых недель. Например,
interval=2отображает каждую вторую неделю.
-
class matplotlib.dates.DayLocator(bymonthday=None, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления для каждого дня месяца, например 1, 15, 30.
Помечает дни, указанные в bymonthday; bymonthday может быть целым числом или последовательностью.
По умолчанию деления создаются для каждого дня месяца:
bymonthday=range(1,32)
-
class matplotlib.dates.HourLocator(byhour=None, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления для каждого часа.
Помечает часы, указанные в byhour; byhour может быть целым числом или последовательностью. По умолчанию деления создаются для каждого часа:
byhour=range(24)interval — интервал между повторениями. Например, если
interval=2, отмечается каждое второе повторение.
-
class matplotlib.dates.MinuteLocator(byminute=None, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления для каждой минуты.
Помечает минуты, указанные в byminute; byminute может быть целым числом или последовательностью. По умолчанию деления создаются для каждой минуты:
byminute=range(60)interval — интервал между повторениями. Например, если
interval=2, отмечается каждое второе повторение.
-
class matplotlib.dates.SecondLocator(bysecond=None, interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.RRuleLocatorСоздаёт деления для каждой секунды.
Помечает секунды, указанные в bysecond; bysecond может быть целым числом или последовательностью. По умолчанию деления создаются для каждой секунды:
bysecond = range(60)interval — интервал между повторениями. Например, если
interval=2, отмечается каждое второе повторение.
-
class matplotlib.dates.MicrosecondLocator(interval=1, tz=None)[исходный код] -
Базовый класс:
matplotlib.dates.DateLocatorСоздаёт деления с регулярным интервалом в одну или несколько микросекунд.
Примечание
Из-за представления времени числами с плавающей точкой в днях, начиная с 0001-01-01 UTC (плюс 1), построение графиков по данным с микросекундным разрешением плохо работает для современных дат.
Если вам нужны графики с микросекундным разрешением, настоятельно рекомендуется использовать значения с плавающей точкой в секундах, а не представление времени типа datetime.
Если вам необходимо использовать datetime.datetime() или аналогичный тип и при этом сохранить точность до микросекунд, единственный выход — использовать очень ранние годы; рекомендуется год 0001.
interval — интервал между итерациями. Например, если
interval=2, помечается каждая вторая микросекунда.-
set_axis(self, axis)[исходный код]
-
set_data_interval(self, vmin, vmax)[исходный код]
-
set_view_interval(self, vmin, vmax)[исходный код]
-
tick_values(self, vmin, vmax)[исходный код] -
Возвращает значения делений, заданные параметрами vmin и vmax.
Примечание
Чтобы получить расположение делений с автоматически определёнными vmin и vmax для соответствующего
axis, просто вызовите экземпляр локатора:>>> print(type(loc)) <type 'Locator'> >>> print(loc()) [1, 2, 3, 4]
-
-
class matplotlib.dates.rrule(freq, dtstart=None, interval=1, wkst=None, count=None, until=None, bysetpos=None, bymonth=None, bymonthday=None, byyearday=None, byeaster=None, byweekno=None, byweekday=None, byhour=None, byminute=None, bysecond=None, cache=False)[исходный код] -
Базовые классы:
dateutil.rrule.rrulebaseЭто основа операции rrule. Она принимает в качестве параметров конструктора все ключевые слова, определённые в RFC (кроме byday, переименованного в byweekday), а также многие другие. Прототип конструктора:
rrule(freq)
Параметр freq должен принимать одно из значений YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY или SECONDLY.
Примечание
Согласно разделу 3.3.10 RFC, экземпляры повторений, приходящиеся на недопустимые даты и время, игнорируются, а не корректируются принудительно:
Правила повторения могут генерировать экземпляры повторений с недопустимой датой (например, 30 февраля) или несуществующим местным временем (например, 1:30 утра в день, когда местное время переводится вперёд на час в 1:00 утра). Такие экземпляры повторений ДОЛЖНЫ игнорироваться и НЕ ДОЛЖНЫ учитываться как часть набора повторений.Это может привести к неожиданному поведению, например, если начальная дата приходится на конец месяца:
>>> from dateutil.rrule import rrule, MONTHLY >>> from datetime import datetime >>> start_date = datetime(2014, 12, 31) >>> list(rrule(freq=MONTHLY, count=4, dtstart=start_date)) ... # doctest: +NORMALIZE_WHITESPACE [datetime.datetime(2014, 12, 31, 0, 0), datetime.datetime(2015, 1, 31, 0, 0), datetime.datetime(2015, 3, 31, 0, 0), datetime.datetime(2015, 5, 31, 0, 0)]
Кроме того, поддерживаются следующие ключевые аргументы:
Параметры: - dtstart — начало повторения. Помимо того, что эта дата служит основой для повторения, из неё также берутся пропущенные параметры конечных экземпляров повторений. Если параметр не указан, используется datetime.now().
- interval — интервал между итерациями freq. Например, для YEARLY значение interval, равное 2, означает повторение раз в два года, а для HOURLY — раз в два часа. Значение по умолчанию — 1.
- wkst — день начала недели. Должен быть одной из констант MO, TU, WE или целым числом, обозначающим первый день недели. Это влияет на повторения, основанные на недельных периодах. По умолчанию день начала недели берётся из calendar.firstweekday(); его можно изменить с помощью calendar.setfirstweekday().
-
count —
Если указан, определяет количество сгенерированных экземпляров.
Примечание
Начиная с версии 2.5.0 использование ключевого слова
untilвместе сcountсчитается устаревшим, чтобы обеспечить полное соответствиеdateutilспецификации RFC-5545, разделу 3.3.10. Поэтомуuntilиcountне должны использоваться в одном вызовеrrule. -
until —
Если указан, должен быть экземпляром datetime, определяющим верхнюю границу повторения. Последнее повторение в правиле — самая поздняя дата, которая меньше или равна значению, указанному в параметре
until.Примечание
Начиная с версии 2.5.0 использование ключевого слова
untilвместе сcountсчитается устаревшим, чтобы обеспечить полное соответствиеdateutilспецификации RFC-5545, разделу 3.3.10. Поэтомуuntilиcountне должны использоваться в одном вызовеrrule. - и т. д.
-
replace(self, **kwargs)[исходный код] -
Возвращает новый rrule с теми же атрибутами, за исключением тех, для которых в ключевых аргументах заданы новые значения.
-
class matplotlib.dates.relativedelta(dt1=None, dt2=None, years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0, seconds=0, microseconds=0, year=None, month=None, day=None, weekday=None, yearday=None, nlyearday=None, hour=None, minute=None, second=None, microsecond=None)[исходный код] -
Базовый класс:
objectТип relativedelta предназначен для применения к существующей дате или времени и может заменять отдельные компоненты этой даты или времени либо представлять временной интервал.
Он основан на превосходной спецификации М.-А. Лембурга, реализованной в его расширении mx.DateTime. Однако обратите внимание, что этот тип НЕ реализует тот же алгоритм, что и его работа. Не следует ожидать, что он будет вести себя так же, как аналог в mx.DateTime.
Создать экземпляр relativedelta можно двумя способами. Первый — передать ему два объекта date или datetime:
relativedelta(datetime1, datetime2)
Второй — передать ему любое количество следующих ключевых аргументов:
relativedelta(arg1=x,arg2=y,arg3=z...) year, month, day, hour, minute, second, microsecond: Absolute information (argument is singular); adding or subtracting a relativedelta with absolute information does not perform an arithmetic operation, but rather REPLACES the corresponding value in the original datetime with the value(s) in relativedelta. years, months, weeks, days, hours, minutes, seconds, microseconds: Relative information, may be negative (argument is plural); adding or subtracting a relativedelta with relative information performs the corresponding aritmetic operation on the original datetime value with the information in the relativedelta. weekday: One of the weekday instances (MO, TU, etc) available in the relativedelta module. These instances may receive a parameter N, specifying the Nth weekday, which could be positive or negative (like MO(+1) or MO(-2)). Not specifying it is the same as specifying +1. You can also use an integer, where 0=MO. This argument is always relative e.g. if the calculated date is already Monday, using MO(1) or MO(-1) won't change the day. To effectively make it absolute, use it in combination with the day argument (e.g. day=1, MO(1) for first Monday of the month). leapdays: Will add given days to the date found, if year is a leap year, and the date found is post 28 of february. yearday, nlyearday: Set the yearday or the non-leap year day (jump leap days). These are converted to day/month/leapdays information.Ключевые аргументы бывают относительной и абсолютной форм. Форма во множественном числе является относительной, а форма в единственном числе — абсолютной. Для каждого аргумента в приведённом ниже порядке сначала применяется абсолютная форма (устанавливая атрибут в указанное значение), а затем относительная (прибавляя значение к атрибуту).
Атрибуты, учитываемые при добавлении этого relativedelta к дате или времени, обрабатываются в следующем порядке:
- Год
- Месяц
- День
- Часы
- Минуты
- Секунды
- Микросекунды
В конце применяется день недели с использованием правила, описанного выше.
Например:
>>> from datetime import datetime >>> from dateutil.relativedelta import relativedelta, MO >>> dt = datetime(2018, 4, 9, 13, 37, 0) >>> delta = relativedelta(hours=25, day=1, weekday=MO(1)) >>> dt + delta datetime.datetime(2018, 4, 2, 14, 37)
Сначала день устанавливается в 1 (первое число месяца), затем добавляются 25 часов, чтобы перейти ко 2-му дню и 14-му часу. Наконец, применяется день недели, но поскольку 2-е число уже приходится на понедельник, это не оказывает никакого эффекта.
-
normalized(self)[исходный код] -
Возвращает версию этого объекта, в которой для относительных атрибутов используются только целочисленные значения.
>>> relativedelta(days=1.5, hours=2).normalized() relativedelta(days=+1, hours=+14)
Возвращает: Возвращает объект dateutil.relativedelta.relativedelta.
-
weeks
-
matplotlib.dates.seconds(s)[исходный код] -
[Устарело] Возвращает секунды в виде дней.
Примечания
Устарело начиная с версии 3.1.
-
matplotlib.dates.minutes(m)[исходный код] -
[Устарело] Возвращает минуты в виде дней.
Примечания
Устарело начиная с версии 3.1.
-
matplotlib.dates.hours(h)[исходный код] -
[Устарело] Возвращает часы в виде дней.
Примечания
Устарело начиная с версии 3.1.
-
matplotlib.dates.weeks(w)[исходный код] -
[Устарело] Возвращает недели в виде дней.
Примечания
Устарело начиная с версии 3.1.
© 2012–2018 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/3.1.1/api/dates_api.html