matplotlib.dates

Inheritance diagram of matplotlib.dates

Matplotlib提供了复杂的日期绘制功能,支持python datetime 以及附加模块 dateutil .

Matplotlib日期格式

Matplotlib使用浮点数表示日期,该浮点数指定自默认纪元1970-01-01 UTC以来的天数;例如,1970-01-01,06:00是浮点数0.25。格式化程序和定位器需要使用 datetime.datetime 对象,因此只能表示0001年和9999年之间的日期。在历元的任何一边(大约)70年内都可以达到微秒精度,在允许的日期范围(0001年到9999年)的其余部分可以达到20微秒精度。可以在导入时通过 dates.set_epochrcParams["dates.epoch"] 如有必要,改为其他日期;见 日期精度和年代 进行讨论。

注解

在Matplotlib 3.3之前,epoch是0000-12-31,它失去了现代的微秒精度,并且使默认的轴限制0成为无效的日期时间。在3.3中,时代如前所述发生了变化。要将旧的序数浮点数转换为新的历元,用户可以执行以下操作:

new_ordinal = old_ordinal + mdates.date2num(np.datetime64('0000-12-31'))

有许多助手函数要在 datetime 对象和Matplotlib日期:

datestr2num 使用将日期字符串转换为datenum dateutil.parser.parse .
date2num 将datetime对象转换为matplotlib日期。
num2date 将Matplotlib日期转换为 datetime 物体。
num2timedelta 将天数转换为 timedelta 对象。
drange 返回等距Matplotlib日期序列。
set_epoch 为datetime计算设置epoch(日期的原点)。
get_epoch 获取所使用的时代 dates .

注解

就像 Python 一样 datetime.datetime ,Matplotlib使用公历进行日期和浮点数之间的所有转换。这种做法并不普遍,日历差异可能会导致Python和Matplotlib给出的0001-01-01之后的天数与其他软件和数据库产生的天数之间的混淆性差异。例如,美国海军天文台在1582年10月使用了一个从朱利安到格里高利的日历。因此,使用他们的计算器,0001-01-01和2006-04-01之间的天数是732403天,而通过datetime模块使用公历,我们发现:

In [1]: date(2006, 4, 1).toordinal() - date(1, 1, 1).toordinal()
Out[1]: 732401

所有的Matplotlib日期转换器、滴答器和格式化程序都可以识别时区。如果没有提供明确的时区, rcParams["timezone"] (default: 'UTC') 是假设的。如果要使用自定义时区,请传递 datetime.tzinfo 带有TZ关键字参数的实例 num2dateplot_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)

规则定位器允许完全通用的日期标记:

# tick every 5th easter
rule = rrulewrapper(YEARLY, byeaster=1, interval=5)
loc = RRuleLocator(rule)

可用的日期标记有:

日期格式化程序

可用的日期格式化程序有:

class matplotlib.dates.AutoDateFormatter(locator, tz=None, defaultfmt='%Y-%m-%d')[源代码]

基类:matplotlib.ticker.Formatter

A Formatter 它试图找出最佳的使用格式。这在与 AutoDateLocator .

自动日期格式设置工具有一个比例字典,它映射刻度的比例(一个主要刻度之间的距离,以天为单位)和格式字符串。默认设置如下:

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 也可以使用。下面的示例演示如何使用自定义格式函数从十进制秒数中去掉尾随的零,并将日期添加到第一个ticklabel::

>>> 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.AutoDateLocator(tz=None, minticks=5, maxticks=None, interval_multiples=True)[源代码]

基类:matplotlib.dates.DateLocator

在自动缩放时,此类选择最佳 DateLocator 设置视图限制和刻度位置。

属性:
intervald双关语

将滴答声频率映射为该滴答声允许的倍数。默认值为:

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, 21],
    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],
}

其中键在中定义 dateutil.rrule .

间隔用于指定适合滴答声频率的倍数。例如,对于每天的滴答声来说,每7天一次是合理的,但是对于分钟/秒来说,15或30天是合理的。

自定义时,应仅修改现有键的值。不应添加或删除条目。

每3小时强制计时的示例:

locator = AutoDateLocator()
locator.intervald[HOURLY] = [3]  # only show every 3 hours
参数:
tzdatetime.tzinfodatetime.tzinfo

勾选时区。

minticks利息

所需的最小刻度数;控制刻度是每年发生还是每月发生等。

maxticks利息

所需的最大刻度数;控制刻度之间的间隔(隔一次、每3次等)。对于细粒度控制,这可以是一个字典,将单个rrule频率常数(每年、每月等)映射到它们自己的最大刻度数。这可用于保持刻度数与中选择的格式相适应 AutoDateFormatter . 本字典中未指定的任何频率都会得到一个默认值。

interval_multiplesbool,默认值:True

记号是否应该选择为间隔的倍数,将它们锁定到“更好”的位置。例如,这将强制滴答时间设置为0、6、12、18小时,而每小时计时间隔为6小时。

autoscale()[源代码]

[Deprecated] 尝试智能地选择视图限制。

笔记

3.2 版后已移除.

get_locator(dmin, dmax)[源代码]

根据距离选择最佳定位器。

nonsingular(vmin, vmax)[源代码]

给定所建议的上下范围,如果范围太接近奇异值(即范围~0),则调整范围。

tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class matplotlib.dates.ConciseDateConverter(formats=None, zero_formats=None, offset_formats=None, show_offset=True)[源代码]

基类:matplotlib.dates.DateConverter

axisinfo(unit, axis)[源代码]

返回 AxisInfo 对于 unit .

unit 是tzinfo实例或没有。这个 axis 参数是必需的,但未使用。

class matplotlib.dates.ConciseDateFormatter(locator, tz=None, formats=None, offset_formats=None, zero_formats=None, show_offset=True)[源代码]

基类:matplotlib.ticker.Formatter

A Formatter 它试图找出用于日期的最佳格式,并使其尽可能紧凑,但仍然是完整的。这在与 AutoDateLocator ::

>>> locator = AutoDateLocator()
>>> formatter = ConciseDateFormatter(locator)
参数:
定位器ticker.Locatorticker.Locator

此轴正在使用的定位器。

tz可选的STR

传递给 dates.date2num .

formats6个字符串的列表,可选

Format strings for 6 levels of tick labelling: mostly years, months, days, hours, minutes, and seconds. Strings use the same format codes as strftime. Default is ['%Y', '%b', '%d', '%H:%M', '%H:%M', '%S.%f']

zero_formats6个字符串的列表,可选

为给定刻度级别的“零”刻度标签设置字符串格式。例如,如果大多数滴答声是个月,那么2005年1月1日左右的节拍将被标记为“Dec”、“2005”、“Feb”。默认值是 ['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M']

offset_formats6个字符串的列表,可选

用于应用于x轴右侧或y轴顶部的“偏移”字符串的6个级别的字符串格式。结合记号标签,这应该完全指定日期。默认值为:

['', '%Y', '%Y-%b', '%Y-%b-%d', '%Y-%b-%d', '%Y-%b-%d %H:%M']
show_offsetbool,默认值:True

是否显示偏移量。

实例

使用ConciseDataformatter格式化日期刻度

(Source code _, pngpdf

../_images/dates_api-1.png

自动套用日期标签格式。默认格式用于形成初始字符串,然后删除多余的元素。

format_data_short(value)[源代码]

返回勾号值的短字符串版本。

默认为位置独立的长值。

format_ticks(values)[源代码]

一次返回所有刻度的刻度标签。

get_offset()[源代码]
class matplotlib.dates.DateConverter[源代码]

基类:matplotlib.units.ConversionInterface

转换器 datetime.datedatetime.datetime 数据,或表示为将由转换的日期/时间数据 date2num .

此类数据的“unit”标记为None或tzinfo实例。

static axisinfo(unit, axis)[源代码]

返回 AxisInfo 对于 unit .

unit 是tzinfo实例或没有。这个 axis 参数是必需的,但未使用。

static convert(value, unit, axis)[源代码]

如果 价值 不是一个数字或数字序列,请用 date2num .

这个 unitaxis 未使用参数。

static default_units(x, axis)[源代码]

返回的tzinfo实例 x 或者它的第一个元素,或者没有

class matplotlib.dates.DateFormatter(fmt, tz=None)[源代码]

基类:matplotlib.ticker.Formatter

使用 strftime 格式化字符串。

参数:
fmtSTR

strftime 设置字符串格式

tz : datetime.tzinfo, default: rcParams["timezone"] (default: 'UTC')日期时间.tzinfo,默认值:rcParams [“时区”] (默认值:“UTC”)

勾选时区。

property illegal_s
set_tzinfo(tz)[源代码]
class matplotlib.dates.DateLocator(tz=None)[源代码]

基类:matplotlib.ticker.Locator

确定绘制日期时的刻度位置。

这个类被其他定位器子类化,并不打算单独使用。

参数:
tzdatetime.tzinfodatetime.tzinfo
datalim_to_dt()[源代码]

将轴数据间隔转换为日期时间对象。

hms0d = {'byhour': 0, 'byminute': 0, 'bysecond': 0}
nonsingular(vmin, vmax)[源代码]

给定所建议的上下范围,如果范围太接近奇异值(即范围~0),则调整范围。

set_tzinfo(tz)[源代码]

设置时区信息。

viewlim_to_dt()[源代码]

将视图间隔转换为datetime对象。

class matplotlib.dates.DayLocator(bymonthday=None, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

在每月的每一天的事件上打勾。例如,1、15、30。

每天标记 每逢星期四每逢星期四 可以是int或sequence。

默认为每月的每一天勾选: bymonthday=range(1, 32) .

class matplotlib.dates.HourLocator(byhour=None, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

每小时出现一次就打勾。

每小时标记 每时每刻每时每刻 可以是int或sequence。默认为每小时打勾: byhour=range(24)

间隔 是每次迭代之间的间隔。例如,如果 interval=2 ,每隔一秒标记一次。

class matplotlib.dates.IndexDateFormatter(t, fmt, tz=None)[源代码]

基类:matplotlib.ticker.Formatter

[Deprecated] 使用与 IndexLocator 按索引循环格式字符串。

笔记

3.3 版后已移除.

参数:
t浮动列表

一系列日期(浮点数天)。

fmtSTR

A strftime 格式化字符串。

class matplotlib.dates.MicrosecondLocator(interval=1, tz=None)[源代码]

基类:matplotlib.dates.DateLocator

以一个或多个微秒的固定间隔进行滴答。

注解

默认情况下,Matplotlib使用以天为单位的时间的浮点表示法,因此对于距离纪元较远(约70年)的日期(请检查 get_epoch

如果需要亚微秒分辨率的时间图,强烈建议使用浮点秒,而不是类似日期时间的时间表示。

如果你真的要用日期时间。日期时间()或类似,仍需要微秒精度,通过 dates.set_epoch 更接近所绘制的日期。看到了吗 日期精度和年代 .

间隔 是每次迭代之间的间隔。例如,如果 interval=2 ,每秒钟标记一次。

set_axis(axis)[源代码]
set_data_interval(vmin, vmax)[源代码]
set_view_interval(vmin, vmax)[源代码]
tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class matplotlib.dates.MinuteLocator(byminute=None, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

每分钟都要打勾。

每分钟标记 每分钟每分钟 可以是int或sequence。默认为每分钟勾选一次: byminute=range(60)

间隔 是每次迭代之间的间隔。例如,如果 interval=2 ,每隔一秒标记一次。

class matplotlib.dates.MonthLocator(bymonth=None, bymonthday=1, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

在每个月的事件上打勾,例如1、3、12。

每月标记 按月按月 可以是int或sequence。默认是 range(1, 13) ,即每月。

间隔 是每次迭代之间的间隔。例如,如果 interval=2 ,每隔一秒标记一次。

class matplotlib.dates.RRuleLocator(o, tz=None)[源代码]

基类:matplotlib.dates.DateLocator

参数:
tzdatetime.tzinfodatetime.tzinfo
autoscale()[源代码]

[Deprecated] 设置视图限制以包括数据范围。

笔记

3.2 版后已移除.

static get_unit_generic(freq)[源代码]
tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
class matplotlib.dates.SecondLocator(bysecond=None, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

每秒钟出现一次都要打勾。

每秒钟标记一次 每秒每秒 可以是int或sequence。默认为每秒钟勾选一次: bysecond = range(60)

间隔 是每次迭代之间的间隔。例如,如果 interval=2 ,每隔一秒标记一次。

class matplotlib.dates.WeekdayLocator(byweekday=1, interval=1, tz=None)[源代码]

基类:matplotlib.dates.RRuleLocator

对每个工作日的事件进行标记。

在中标记每个工作日 周日周日 可以是数字或序列。

要素 周日 必须是mo、tu、we、th、fr、sa、su中的一个,常量来自 dateutil.rrule ,已导入到 matplotlib.dates 命名空间。

间隔 指定要跳过的周数。例如, interval=2 每两周绘图一次。

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月1日)。

autoscale()[源代码]

[Deprecated] 设置视图限制以包括数据范围。

笔记

3.2 版后已移除.

tick_values(vmin, vmax)[源代码]

返回给定的定位标记的值 vminvmax .

注解

使用自动为关联的 axis 只需调用定位器实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
matplotlib.dates.date2num(d)[源代码]

将datetime对象转换为matplotlib日期。

参数:
ddatetime.datetimenumpy.datetime64 或这些序列datetime.datetime或numpy.datetime64或其序列
返回:
浮动或浮动顺序

从新纪元开始的天数。看到了吗 get_epoch 为了这个时代 rcParams["date.epoch"] (default: '1970-01-01T00:00:00') 或 set_epoch . 如果epoch为“1970-01-01T00:00:00”(默认值),则noon Jan 1 1970(“1970-01-01T12:00:00”)返回0.5。

笔记

公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。

matplotlib.dates.datestr2num(d, default=None)[源代码]

使用将日期字符串转换为datenum dateutil.parser.parse .

参数:
dstr或str序列

要转换的日期。

default日期时间。日期时间,可选

字段丢失时使用的默认日期 d .

matplotlib.dates.drange(dstart, dend, delta)[源代码]

返回等距Matplotlib日期序列。

日期开始于 DSTART 达到但不包括 dend . 它们的间距为 三角洲 .

参数:
dStanddatetime日期时间

日期限制。

三角洲datetime.timedeltadatetime.timedelta

日期间隔。

返回:
numpy.array

表示matplotlib日期的列表浮动。

matplotlib.dates.epoch2num(e)[源代码]

将UNIX时间转换为Matplotlib epoch之后的天数。

参数:
e浮动列表

自1970-01-01以来的时间(秒)。

返回:
numpy.array

自Matplotlib纪元起的时间(以天为单位)(请参见 get_epoch()

matplotlib.dates.get_epoch()[源代码]

获取所使用的时代 dates .

返回:
时代:str

表示纪元的字符串(可由 numpy.datetime64

matplotlib.dates.mx2num(mxdates)[源代码]

[Deprecated] 转换MX datetime 新日期格式的实例(或MX实例序列)。

笔记

3.2 版后已移除.

matplotlib.dates.num2date(x, tz=None)[源代码]

将Matplotlib日期转换为 datetime 物体。

参数:
x浮动或浮动顺序

自epoch以来的天数(分数部分表示小时、分钟、秒)。看到了吗 get_epoch 为了这个时代 rcParams["date.epoch"] (default: '1970-01-01T00:00:00') 或 set_epoch .

tz可选的STR

时区 x (默认为 rcParams["timezone"] (default: 'UTC') )

返回:
datetime or sequence of datetime

日期在时区中返回 tz .

如果 x 是一个序列,一个序列 datetime 将返回对象。

笔记

这里加一件是历史文物。另外,请注意,公历是假定的;这不是普遍的做法。有关详细信息,请参阅模块docstring。

matplotlib.dates.num2epoch(d)[源代码]

将Matplotlib epoch后的天数转换为UNIX时间。

参数:
d浮动列表

自Matplotlib纪元起的时间(以天为单位)(请参见 get_epoch()

返回:
numpy.array

自1970-01-01以来的时间(秒)。

matplotlib.dates.num2timedelta(x)[源代码]

将天数转换为 timedelta 对象。

如果 x 是一个序列,一个序列 timedelta 将返回对象。

参数:
x浮动,浮动顺序

天数。分数部分表示小时、分钟、秒。

返回:
datetime.timedelta 或列表 [datetime.timedelta]
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 延伸。但是,请注意,这种类型是 NOT 实现与他的工作相同的算法。做 NOT 希望它的行为类似于mx.datetime的对应项。

构建relativedelta实例有两种不同的方法。第一个将传递两个日期/日期时间类:

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 arithmetic 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添加到日期时间时考虑的属性顺序为:

  1. 月份
  2. 小时
  3. 分钟
  4. 微秒

最后,使用上面描述的规则应用工作日。

例如

>>> 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()[源代码]

返回完全使用整数值表示相对属性的此对象的版本。

>>> relativedelta(days=1.5, hours=2).normalized()
relativedelta(days=+1, hours=+14)
返回:返回A dateutil.relativedelta.relativedelta 对象。
property weeks
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

这就是规则操作的基础。它接受在RFC中定义的所有关键字作为其构造函数参数(除了ByDay,它被重命名为ByWeekDay)等等。构造函数原型是:

rrule(freq)

其中freq必须是每年、每月、每周、每天、每小时、每分钟或第二个。

注解

根据RFC第3.3.10节,处于无效日期和时间的重复实例将被忽略,而不是强制:

定期规则可能会生成具有无效日期(例如2月30日)或不存在本地时间(例如,本地时间在上午1:00向前移动一小时的一天中的上午1:30)的定期实例。此类定期实例必须被忽略,并且不能作为定期集的一部分计数。

例如,当开始日期出现在月末时,这可能会导致意外的行为:

>>> 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))
... 
[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 -- 每个频率迭代之间的间隔。例如,当每年使用时,间隔2表示每两年一次,而对于每小时,间隔2表示每两小时一次。默认间隔为1。
  • wkst -- 周开始日。必须是mo、tu、we常量或整数之一,指定一周的第一天。这将影响基于周周期的复发。默认的周开始时间是从calendar.firstweekday()获取的,并且可以由calendar.setfirstweekday()修改。
  • count -- 如果给定,这将确定将生成多少个事件。…注意:从2.5.0版开始,使用关键字 untilcount 已弃用,以确保 dateutil 完全符合 RFC-5545 Sec. 3.3.10 . 因此, untilcount 不能 在同一调用中发生 rrule .
  • until -- 如果给定,则必须是一个日期时间实例,指定重复周期的上限。规则中的最后一个重复周期是小于或等于中指定的值的最大日期时间。 until 参数。…注意:从2.5.0版开始,使用关键字 untilcount 已弃用,以确保 dateutil 完全符合 RFC-5545 Sec. 3.3.10 . 因此, untilcount 不能 在同一调用中发生 rrule .
  • bysetpos -- 如果给定,它必须是一个整数,或者是一个整数序列,正的或负的。每个给定的整数将指定一个出现次数,对应于频率周期内规则的第n个出现次数。例如,如果将bysetpos与每月频率结合使用,则为-1;如果将byweekday与(mo、tu、we、th、fr)结合使用,则将导致每个月的最后一个工作日。
  • bymonth -- 如果给定,它必须是整数或整数序列,这意味着要应用重复周期的月份。
  • bymonthday -- 如果给定,则它必须是整数或整数序列,这意味着应用重复周期的月份天数。
  • byyearday -- 如果给定,则它必须是整数或整数序列,这意味着要应用重复周期的年份天数。
  • byeaster -- 如果给定,它必须是一个整数,或者是一个整数序列,正的或负的。每个整数都将定义一个与复活节星期日的偏移量。将偏移量0传递到byeaster将生成复活节星期日本身。这是对RFC规范的扩展。
  • byweekno -- 如果给定,它必须是整数或整数序列,这意味着要应用递归的周数。周数的含义如ISO8601所述,也就是说,一年中的第一周至少包含新年的四天。
  • byweekday -- 如果给定,它必须是整数(0==mo)、整数序列、工作日常量之一(mo、tu等)或这些常量的序列。如果给定,这些变量将定义将应用定期的工作日。对于工作日实例,也可以使用参数n,这意味着该期间中该工作日的第n次出现。例如,对于Monthly或Yearly和ByMonth,在ByWeekDay中使用fr(+1)将指定发生重复的月份的第一个星期五。请注意,在RFC文档中,这被指定为byday,但被重命名以避免该关键字的模糊性。
  • byhour -- 如果给定,它必须是一个整数,或者是一个整数序列,这意味着应用循环的时间。
  • byminute -- 如果给定,则它必须是整数或整数序列,这意味着应用循环的分钟数。
  • bysecond -- 如果给定,它必须是整数或整数序列,这意味着应用循环的秒数。
  • cache -- 如果给定,它必须是一个指定的布尔值,以启用或禁用结果缓存。如果您将多次使用同一个规则实例,启用缓存将大大提高性能。
replace(**kwargs)[源代码]

返回具有相同属性的新rrule,除了那些由指定的关键字参数赋予新值的属性。

matplotlib.dates.set_epoch(epoch)[源代码]

为datetime计算设置epoch(日期的原点)。

默认纪元为 rcParams["dates.epoch"] (默认为1970-01-01T00:00)。

如果需要微秒精度,绘制的日期需要在大约70年的时间内。Matplotlib在内部将日期表示为自epoch以来的天,因此浮点动态范围需要在2^52的因子范围内。

set_epoch 必须在转换任何日期之前调用(即在导入节附近),否则将引发RuntimeError。

另见 日期精度和年代 .

参数:
epochSTR

有效UTC日期可分析者 numpy.datetime64 (不包括时区)。