matplotlib.dates#

Inheritance diagram of matplotlib.dates

Matplotlib 提供了复杂的日期绘图功能,建立在 python datetime 模块和附加模块 dateutil 的基础上。

默认情况下,Matplotlib 使用 units 中描述的单位机制来转换 datetime.datetimenumpy.datetime64 对象,当它们在 x 轴或 y 轴上绘制时。用户不需要为日期格式化做任何事情,但日期通常有严格的格式化需求,因此该模块提供了许多刻度定位器和格式化器。使用 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_epochrcParams["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

使用 dateutil.parser.parse 将日期字符串转换为日期编号。

date2num

将日期时间对象转换为 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"] (default: 'UTC'),以字符串形式提供。如果你想使用不同的时区,可以将 num2datetz 关键字参数传递给你创建的任何日期刻度定位器或格式化器。这可以是 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)

可用的日期刻度定位器有:

日期格式化器#

可用的日期格式化器有:

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

基类:Formatter

一个 Formatter 尝试找出最佳格式来使用。 当与 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

自动格式化日期标签。

参数:
locatorticker.Locator

此轴使用的定位器。

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

defaultfmtstr

如果在 self.scaled 中的值没有一个大于 locator._get_unit() 返回的单位,则使用的默认格式。

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

启用/禁用使用 TeX 的数学模式来渲染格式化器的结果。如果 self.scaled 中的任何条目被设置为函数,那么由自定义函数来决定是否启用或禁用 TeX 的数学模式。

class matplotlib.dates.AutoDateLocator(tz=None, minticks=5, maxticks=None, interval_multiples=True)[源代码][源代码]#

基类:DateLocator

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

属性:
intervalddict

映射滴答频率到该滴答允许的倍数。默认是

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"] (default: 'UTC')str 或

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

minticks整数

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

maxticks整数

所需的最大刻度数;控制刻度之间的间隔(每隔一个、每隔三个等)。为了进行细粒度控制,这可以是一个字典,将单个 rrule 频率常量(YEARLY、MONTHLY 等)映射到它们自己的最大刻度数。这可以用于保持刻度数与 AutoDateFormatter 中选择的格式相适应。任何未在此字典中指定的频率都会被赋予一个默认值。

interval_multiplesbool, 默认: True

刻度是否应选择为间隔的倍数,将它们锁定在'更好'的位置。例如,这将强制刻度在每6小时间隔时位于0、6、12、18小时。

get_locator(dmin, dmax)[源代码][源代码]#

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

nonsingular(vmin, vmax)[源代码][源代码]#

给定建议的上限和下限,如果范围过于接近单一值(即范围约为0),则调整范围。

tick_values(vmin, vmax)[源代码][源代码]#

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

备注

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

>>> 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, *, interval_multiples=True)[源代码][源代码]#

基类:DateConverter

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

返回 unitAxisInfo

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

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

基类:Formatter

一个 Formatter ,它试图找出最适合使用的日期格式,并使其尽可能紧凑,但仍然完整。这在使用 AutoDateLocator 时最为有用:

>>> locator = AutoDateLocator()
>>> formatter = ConciseDateFormatter(locator)
参数:
locatorticker.Locator

此轴使用的定位器。

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

刻度时区,传递给 dates.num2date

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

用于6个级别的刻度标签格式化字符串:主要是年、月、日、小时、分钟和秒。字符串使用与 strftime 相同的格式代码。默认值为 ['%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']

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

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

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

是否显示偏移量。

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

启用/禁用使用 TeX 的数学模式来渲染格式化器的结果。

示例

参见 使用 ConciseDateFormatter 格式化日期刻度

(Source code, 2x.png, png)

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

format_data_short(value)[源代码][源代码]#

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

默认为位置无关的长值。

format_ticks(values)[源代码][源代码]#

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

get_offset()[源代码][源代码]#
class matplotlib.dates.DateConverter(*, interval_multiples=True)[源代码][源代码]#

基类:ConversionInterface

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

此类数据的'unit'标签为 None 或 tzinfo 实例。

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

返回 unitAxisInfo

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

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

如果 value 还不是数字或数字序列,请使用 date2num 进行转换。

不使用 unitaxis 参数。

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

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

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

基类:Formatter

使用 strftime 格式字符串格式化一个从纪元开始的天数(以天为单位)。

参数:
fmtstr

strftime 格式字符串

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

启用/禁用使用 TeX 的数学模式来渲染格式化器的结果。

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

基类:Locator

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

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

datalim_to_dt()[源代码][源代码]#

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

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

给定建议的上限和下限,如果范围过于接近单一值(即范围约为0),则调整范围。

set_tzinfo(tz)[源代码][源代码]#

设置时区信息。

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

viewlim_to_dt()[源代码][源代码]#

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

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

基类:RRuleLocator

在每个月的每一天发生时打上标记。例如,1号、15号、30号。

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

bymonthday 中,每天都会放置刻度。默认是 bymonthday=range(1, 32),即每月的每一天。

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

基类:RRuleLocator

在每个小时的时刻打上刻度。

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

byhour 中,每小时都会放置一个刻度。默认是 byhour=range(24),即每小时。

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

基类:DateLocator

在以一个或多个微秒为间隔的常规时间点上打上刻度。

备注

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

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

如果你确实必须使用 datetime.datetime() 或类似的方法,并且仍然需要微秒精度,可以通过 dates.set_epoch 更改时间原点,使其更接近所绘制的时间。参见 日期精度和历元

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

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

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

备注

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

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

基类:RRuleLocator

在每分钟的时刻打上标记。

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

刻度将放置在 byminute 中的每一分钟。默认是 byminute=range(60),即每一分钟。

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

基类:RRuleLocator

在每个月份的发生时打上刻度,例如,1, 3, 12。

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

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

bymonthdayint, 默认值: 1

放置刻度的日期。

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

基类:DateLocator

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

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

备注

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

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

基类:RRuleLocator

在每秒发生时打上标记。

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

刻度将每隔一秒放置在 bysecond 中。默认是 bysecond = range(60),即每秒。

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

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

基类:RRuleLocator

在每个工作日的出现时打勾。

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

byweekday 中,每个工作日都会放置刻度。默认是每一天。

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

间隔int, 默认值: 1

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

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

class matplotlib.dates.YearLocator(base=1, month=1, day=1, tz=None)[源代码][源代码]#

基类:RRuleLocator

在每年给定的某一天生成刻度,这一天是基数的倍数。

示例:

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

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

马克每 基础 年标记一次。

int, 默认值: 1

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

int, 默认值: 1

放置刻度的日期。

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

刻度时区。如果是一个字符串,tz 会被传递给 dateutil.tz

matplotlib.dates.date2num(d)[源代码][源代码]#

将日期时间对象转换为 Matplotlib 日期。

参数:
d : datetime.datetimenumpy.datetime64 或这些类型的序列datetime.datetime 或 numpy.datetime64 或这些的序列
返回:
浮点数或浮点数序列

自纪元以来的天数。 有关纪元的信息,请参见 get_epoch ,纪元可以通过 rcParams["date.epoch"] (default: '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)[源代码][源代码]#

使用 dateutil.parser.parse 将日期字符串转换为日期编号。

参数:
dstr 或 str 序列

要转换的日期。

默认datetime.datetime, 可选

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

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

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

日期从 dstart 开始,一直到但不包括 dend 。它们之间的时间间隔为 delta

参数:
dstart, denddatetime

日期限制。

deltadatetime.timedelta

日期的间距。

返回:
numpy.array

一个表示 Matplotlib 日期的浮点数列表。

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

获取由 dates 使用的纪元。

返回:
时期str

纪元字符串(可由 numpy.datetime64 解析)。

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

将 Matplotlib 日期转换为 datetime 对象。

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

自纪元以来的天数(小数部分表示小时、分钟、秒)。关于纪元,请参见 get_epoch,纪元可以通过 rcParams["date.epoch"] (default: '1970-01-01T00:00:00') 或 set_epoch 更改。

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

时区 x。如果是一个字符串,tz 会被传递给 dateutil.tz

返回:
datetimedatetime 的序列

日期以时区 tz 返回。

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

注释

假设使用的是公历;这并非普遍做法。详情请参阅模块文档字符串。

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

将天数转换为 timedelta 对象。

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

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

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

返回:
datetime.timedelta 或 list[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 类型旨在应用于现有的 datetime,并可以替换该 datetime 的特定组件,或者表示一个时间间隔。

它是基于 M.-A. Lemburg 在其 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 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 被添加到 datetime 时,考虑的属性顺序为:

  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日已经是星期一,因此没有影响。

normalized()[源代码]#

返回此对象的一个版本,其中所有相对属性均使用整数值表示。

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

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

property weeks#

!! 由 numpydoc 处理 !!

class matplotlib.dates.rrulewrapper(freq, tzinfo=None, **kwargs)[源代码][源代码]#

基类:object

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

参数:
freq{YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY}

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

tzinfo : datetime.tzinfo, 可选datetime.tzinfo, 可选

时区信息。默认值为 None。

**kwargs

其他关键字参数传递给 dateutil.rrule

set(**kwargs)[源代码][源代码]#

为现有包装器设置参数。

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

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

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

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

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

另请参阅 日期精度和历元

参数:
时期str

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