matplotlib.dates#

matplotlib.dates的继承图

Matplotlib 提供了复杂的日期绘图功能,站在 pythondatetime和附加模块dateutil的肩膀上。

默认情况下,Matplotlib 在 x 轴或 y 轴上绘制时使用中描述的单位机制units来转换datetime.datetime和对象。numpy.datetime64用户不需要做任何事情来格式化日期,但是日期通常有严格的格式化需求,所以这个模块提供了很多轴定位器和格式化器。使用的基本示例numpy.datetime64是:

import numpy as np

times = np.arange(np.datetime64('2001-01-02'),
                  np.datetime64('2002-02-03'), np.timedelta64(75, 'm'))
y = np.random.randn(len(times))

fig, ax = plt.subplots()
ax.plot(times, y)

Matplotlib 日期格式#

Matplotlib 使用浮点数表示日期,指定自默认纪元 1970-01-01 UTC 以来的天数;例如,1970-01-01, 06:00 是浮点数 0.25。格式化程序和定位器需要使用datetime.datetime对象,因此只能表示 0001 年到 9999 年之间的日期。在纪元两侧(大约)70 年可以实现微秒精度,在允许的日期范围(0001 年到 9999 年)的其余部分可以达到 20 微秒。如有必要,可以在导入时通过dates.set_epoch或 其他日期更改纪元;rcParams["dates.epoch"]有关讨论,请参阅 日期精度和时期

笔记

在 Matplotlib 3.3 之前,纪元是 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

设置日期时间计算的纪元(日期的原点)。

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"](默认值:),以字符串形式提供。'UTC'如果您想使用不同的时区,请将tz关键字参数传递num2date给您创建的任何日期代码或定位器。这可以是一个datetime.tzinfo实例,也可以是一个带有时区名称的字符串,可以由gettz.

此模块中提供了广泛的特定和通用日期刻度定位器和格式化程序。有关刻度定位器和格式化程序的一般信息,请参阅 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)

可用的日期代码是:

日期格式化程序#

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

matplotlib.dates。AutoDateFormatter ( locator , tz = None , defaultfmt = '%Y-%m-%d' , * , usetex = None ) [source] #

基地:Formatter

AFormatter试图找出要使用的最佳格式。这在与AutoDateLocator.

AutoDateFormatter有一个.scale字典,将刻度刻度(一个主要刻度之间的天数间隔)映射到格式化字符串;这本词典默认为

self.scaled = {
    DAYS_PER_YEAR: rcParams['date.autoformatter.year'],
    DAYS_PER_MONTH: rcParams['date.autoformatter.month'],
    1: rcParams['date.autoformatter.day'],
    1 / HOURS_PER_DAY: rcParams['date.autoformatter.hour'],
    1 / MINUTES_PER_DAY: rcParams['date.autoformatter.minute'],
    1 / SEC_PER_DAY: rcParams['date.autoformatter.second'],
    1 / MUSECONDS_PER_DAY: rcParams['date.autoformatter.microsecond'],
}

格式化程序使用与字典中大于或等于当前比例的最低键对应的格式字符串。字典条目可以自定义:

locator = AutoDateLocator()
formatter = AutoDateFormatter(locator)
formatter.scaled[1/(24*60)] = '%M:%S' # only show min and sec

也可以使用自定义可调用对象来代替格式字符串。以下示例显示如何使用自定义格式函数从小数秒中去除尾随零并将日期添加到第一个刻度标签:

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

formatter.scaled[1/(24*60)] = my_format_function

自动格式化日期标签。

参数
定位器ticker.Locator

该轴正在使用的定位器。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

默认fmt str

如果 中的任何值self.scaled 都不大于 . 返回的单位,则使用的默认格式locator._get_unit()

usetex布尔值,默认值:(rcParams["text.usetex"]默认值False:)

启用/禁用使用 TeX 的数学模式来呈现格式化程序的结果。如果其中的任何条目self.scaled设置为函数,则由自定义函数来启用或禁用 TeX 的数学模式本身。

matplotlib.dates。AutoDateLocator ( tz = None , minticks = 5 , maxticks = None , interval_multiples = True ) [来源] #

基地:DateLocator

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

属性
间隔字典

将刻度频率映射到允许该刻度的倍数。默认是

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
参数
tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

薄荷糖int

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

maxticks int

所需的最大刻度数;控制滴答之间的间隔(每隔一个、每 3 个等)。对于细粒度控制,这可以是一个字典,将单个规则频率常数(每年、每月等)映射到它们自己的最大刻度数。这可用于保持刻度数适合于在 中选择的格式AutoDateFormatter。此字典中未指定的任何频率都被赋予默认值。

interval_multiples布尔值,默认值:True

刻度是否应该选择为间隔的倍数,将它们锁定到“更好”的位置。例如,当每小时滴答以 6 小时为间隔进行时,这将强制滴答位于 0、6、12、18 小时。

get_locator ( dmin , dmax ) [来源] #

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

nonsingular ( vmin , vmax ) [source] #

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

tick_values ( vmin , vmax ) [来源] #

返回给定vminvmax的定位刻度值。

笔记

要使用自动为关联定义的 vmin 和 vmax 值获取刻度位置,axis只需调用 Locator 实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
matplotlib.dates。ConciseDateConverter (格式= None , zero_formats = None , offset_formats = None , show_offset = True , * , interval_multiples = True ) [来源] #

基地:DateConverter

axisinfo ( unit , axis ) [来源] #

返回AxisInfofor单位

unit是一个 tzinfo 实例或无。参数是必需的,但未使用。

matplotlib.dates。ConciseDateFormatter ( locator , tz = None , formats = None , offset_formats = None , zero_formats = None , show_offset = True , * , usetex = None ) [来源] #

基地:Formatter

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

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

该轴正在使用的定位器。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区,传递给dates.num2date.

格式列表 6 个字符串,可选

6 级刻度标记的格式字符串:主要是年、月、日、小时、分钟和秒。字符串使用与strftime. 默认为 ['%Y', '%b', '%d', '%H:%M', '%H:%M', '%S.%f']

zero_formats 6 个字符串的列表,可选

对于给定刻度级别,刻度标签的格式字符串为“零”。例如,如果大多数刻度是月份,则 2005 年 1 月 1 日左右的刻度将被标记为“Dec”、“2005”、“Feb”。默认是 ['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M']

offset_formats 6 个字符串的列表,可选

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

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

是否显示偏移量。

usetex布尔值,默认值:(rcParams["text.usetex"]默认值False:)

启用/禁用使用 TeX 的数学模式来呈现格式化程序的结果。

例子

请参阅使用 ConciseDateFormatter 格式化日期刻度

源代码png

../_images/dates_api-1.png

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

format_data_short () [来源] #

返回刻度值的短字符串版本。

默认为与位置无关的 long 值。

format_ticks () [来源] #

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

get_offset ( ) [来源] #
matplotlib.dates。DateConverter ( * , interval_multiples = True ) [来源] #

基地:ConversionInterface

datetime.date和数据的转换器datetime.datetime,或用于表示将由 转换的日期/时间数据的转换器date2num

此类数据的“单位”标签是 None 或 tzinfo 实例。

axisinfo ( unit , axis ) [来源] #

返回AxisInfofor单位

unit是一个 tzinfo 实例或无。参数是必需的,但未使用。

静态 转换(,单位,) [来源] #

如果value还不是数字或数字序列,则将其转换为date2num.

不使用单位参数。

静态 default_units ( x , axis ) [来源] #

返回x或其第一个元素的 tzinfo 实例,或 None

matplotlib.dates。DateFormatter ( fmt , tz = None , * , usetex = None ) [来源] #

基地:Formatter

strftime使用格式字符串格式化刻度(以纪元以来的天数为单位) 。

参数
fmt字符串

strftime格式化字符串

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

usetex布尔值,默认值:(rcParams["text.usetex"]默认值False:)

启用/禁用使用 TeX 的数学模式来呈现格式化程序的结果。

set_tzinfo ( tz ) [来源] #
matplotlib.dates。DateLocator ( tz = None ) [来源] #

基地:Locator

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

此类是其他定位器的子类,并不打算单独使用。

参数
tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

datalim_to_dt ( ) [来源] #

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

hms0d = {'byhour': 0, 'byminute': 0, 'bysecond': 0} #
nonsingular ( vmin , vmax ) [source] #

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

set_tzinfo ( tz ) [来源] #

设置时区信息。

参数
tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

viewlim_to_dt ( ) [来源] #

将视图间隔转换为日期时间对象。

matplotlib.dates。DayLocator ( bymonthday = None , interval = 1 , tz = None ) [来源] #

基地:RRuleLocator

对每月每一天的事件进行标记。例如,1、15、30。

参数
bymonthday int 或 int 列表,默认:所有天

刻度线将在bymonthday的每一天放置。默认值为 ,即每月的每一天。bymonthday=range(1, 32)

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。HourLocator ( byhour = None , interval = 1 , tz = None ) [来源] #

基地:RRuleLocator

对每小时发生的事件打勾。

参数
byhour int 或 int 列表,默认值:所有小时

刻度将在byhour中每小时放置一次。默认值为 byhour=range(24),即每小时。

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。MicrosecondLocator ( interval = 1 , tz = None ) [source] #

基地:DateLocator

每隔一微秒或多微秒定期进行滴答声。

笔记

默认情况下,Matplotlib 使用自纪元以来的天数表示时间的浮点表示,因此以微秒时间分辨率绘制数据对于远离纪元(约 70 年)的日期来说效果不佳(检查 get_epoch)。

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

如果您确实必须使用 datetime.datetime() 或类似的方法并且仍然需要微秒精度,请将时间原点更改为 dates.set_epoch更接近所绘制日期的值。请参阅日期精度和历元

参数
间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

set_axis () [来源] #
set_data_interval ( vmin , vmax ) [来源] #

[已弃用]

笔记

3.5 版后已弃用:改为使用Axis.set_data_interval

set_view_interval ( vmin , vmax ) [来源] #

[已弃用]

笔记

3.5 版后已弃用:改为使用Axis.set_view_interval

tick_values ( vmin , vmax ) [来源] #

返回给定vminvmax的定位刻度值。

笔记

要使用自动为关联定义的 vmin 和 vmax 值获取刻度位置,axis只需调用 Locator 实例:

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

基地:RRuleLocator

在每分钟的出现上打勾。

参数
byminute int 或 int 列表,默认:所有分钟

刻度将被放置在每分钟byminutes上。默认值为 byminute=range(60),即每分钟。

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。MonthLocator ( bymonth = None , bymonthday = 1 , interval = 1 , tz = None ) [来源] #

基地:RRuleLocator

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

参数
bymonth int 或 int 列表,默认:所有月份

在bymonth的每个月都会放置刻度线。默认为 ,即每月。range(1, 13)

bymonthday int,默认值:1

放置刻度的日期。

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。RRuleLocator ( o , tz = None ) [来源] #

基地:DateLocator

参数
tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

静态 get_unit_generic (频率) [来源] #
tick_values ( vmin , vmax ) [来源] #

返回给定vminvmax的定位刻度值。

笔记

要使用自动为关联定义的 vmin 和 vmax 值获取刻度位置,axis只需调用 Locator 实例:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
matplotlib.dates。SecondLocator ( bysecond = None , interval = 1 , tz = None ) [source] #

基地:RRuleLocator

对每一秒的出现进行标记。

参数
bysecond int 或 int 列表,默认:所有秒

刻度将在bysecond的每一秒上放置。默认值为 ,即每秒。bysecond = range(60)

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。WeekdayLocator ( byweekday = 1 , interval = 1 , tz = None ) [来源] #

基地:RRuleLocator

在每个工作日的事件上打勾。

参数
byweekday int 或 int 列表,默认:所有天

刻度线将在byweekday的每个工作日放置。默认是每天。

byweekday的元素必须是 MO, TU, WE, TH, FR, SA, SU, from 的常量之一dateutil.rrule,它们已被导入matplotlib.dates命名空间。

间隔整数,默认值:1

每次迭代之间的间隔。例如,如果 interval=2,则标记每第二次出现。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。YearLocator ( base = 1 , month = 1 , day = 1 , tz = None ) [source] #

基地:RRuleLocator

在每年的给定日期打勾,这是基数的倍数。

例子:

# Tick every year on Jan 1st
locator = YearLocator()

# Tick every 5 years on July 4th
locator = YearLocator(5, month=7, day=4)
参数
基本整数,默认值:1

标记每个基准年。

月份int,默认值:1

放置刻度的月份,从 1 开始。默认为一月。

整数,默认值:1

放置刻度的日期。

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

刻度时区。如果是字符串,则将tz传递给dateutil.tz.

matplotlib.dates。date2num ( d ) [来源] #

将 datetime 对象转换为 Matplotlib 日期。

参数
ddatetime.datetimenumpy.datetime64或这些序列
返回
浮点数或浮点数序列

自纪元以来的天数。查看get_epochepoch,可以通过rcParams["date.epoch"](默认值:)'1970-01-01T00:00:00'set_epoch. 如果纪元是“1970-01-01T00:00:00”(默认),则 1970 年 1 月 1 日中午(“1970-01-01T12:00:00”)返回 0.5。

笔记

假定为公历;这不是普遍做法。有关详细信息,请参阅模块文档字符串。

matplotlib.dates。datestr2num ( d , default = None ) [来源] #

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

参数
d str 或 str 序列

要转换的日期。

默认datetime.datetime,可选

d中缺少字段时使用的默认日期。

matplotlib.dates。drange ( dstart , dend , delta ) [来源] #

返回一系列等间距的 Matplotlib 日期。

日期从dstart开始,一直到但不包括dend。它们由delta隔开。

参数
开始,结束datetime

日期限制。

三角洲datetime.timedelta

日期的间距。

返回
numpy.array

代表 Matplotlib 日期的列表浮动。

matplotlib.dates。epoch2num ( e ) [来源] #

[已弃用] 将 UNIX 时间转换为自 Matplotlib 纪元以来的天数。

参数
浮动列表

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

返回
numpy.array

自 Matplotlib 纪元以来的天数(参见 参考资料get_epoch())。

笔记

3.5 版后已弃用:改用numpy.datetime64 类型。[date2num(datetime.utcfromtimestamp(t)) for t in e]

matplotlib.dates。get_epoch ( ) [来源] #

获取dates.

返回
纪元_

纪元的字符串(可通过 解析numpy.datetime64)。

matplotlib.dates。num2date ( x , tz = None ) [来源] #

将 Matplotlib 日期转换为datetime对象。

参数
x浮点数或浮点数序列

自纪元以来的天数(分数部分表示小时、分钟、秒)。查看get_epochepoch,可以通过rcParams["date.epoch"](默认值:)'1970-01-01T00:00:00'set_epoch.

tz str 或tzinfo, 默认值: rcParams["timezone"](默认值: 'UTC')

x的时区。如果是字符串,则将tz传递给dateutil.tz.

返回
datetime或序列datetime

日期以时区tz返回。

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

笔记

假定为公历;这不是普遍做法。有关详细信息,请参阅模块文档字符串。

matplotlib.dates。num2epoch ( d ) [来源] #

[已弃用] 将自 Matplotlib 纪元以来的天数转换为 UNIX 时间。

参数
d浮点数列表

自 Matplotlib 纪元以来的天数(参见 参考资料get_epoch())。

返回
numpy.array

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

笔记

3.5 版后已弃用:改为使用num2date(e).timestamp()

matplotlib.dates。num2timedelta ( x ) [来源] #

将天数转换为timedelta对象。

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

参数
x浮点数,浮点数序列

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

返回
datetime.timedelta或列表[ datetime.timedelta]
matplotlib.dates。relativedelta ( dt1 =, dt2 =,= 0 ,= 0 ,= 0 ,闰日= 0 ,= 0 ,小时= 0 ,分钟= 0 ,= 0 ,微秒= 0 ,=,= None , day = None , weekday = None , yearday = None , nlyearday = None , hour = None , minute = None , second = None , microsecond = None )#

基地:object

relativedelta 类型旨在应用于现有日期时间,并且可以替换该日期时间的特定组件,或表示时间间隔。

它基于 M.-A 所做的出色工作的规范。Lemburg 在他的 mx.DateTime扩展中。但是,请注意,这种类型没有实现与他的工作相同的算法。不要期望它表现得像 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. 微秒

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

例如

>>> 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 天已经是星期一,因此没有效果.

归一化( ) #

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

>>> relativedelta(days=1.5, hours=2).normalized()
relativedelta(days=+1, hours=+14)
返回

返回一个dateutil.relativedelta.relativedelta对象。

房地产 #
matplotlib.dates。rrulewrapper ( freq , tzinfo = None , ** kwargs ) [source] #

基地:object

一个dateutil.rrule允许灵活日期刻度规范的简单包装器。

参数
频率{每年、每月、每周、每天、每小时、每分钟、第二次}

滴答频率。这些常量在 中定义dateutil.rrule,但也可以从中访问matplotlib.dates

tzinfo datetime.tzinfo, 可选

时区信息。默认值为无。

**kwargs

额外的关键字参数被传递给dateutil.rrule.

设置( ** kwargs ) [来源] #

为现有包装器设置参数。

matplotlib.dates。set_epoch (纪元) [来源] #

设置日期时间计算的纪元(日期的原点)。

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

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

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

另请参阅日期精度和历元

参数
纪元_

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