matplotlib.dates
#
Matplotlib 提供了复杂的日期绘图功能,建立在 python datetime
模块和附加模块 dateutil 的基础上。
默认情况下,Matplotlib 使用 units
中描述的单位机制来转换 datetime.datetime
和 numpy.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_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 日期之间进行转换:
使用 |
|
将日期时间对象转换为 Matplotlib 日期。 |
|
将 Matplotlib 日期转换为 |
|
将天数转换为 |
|
返回一个等间距的 Matplotlib 日期序列。 |
|
设置日期时间计算的纪元(日期的起点)。 |
|
获取由 |
备注
与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'
),以字符串形式提供。如果你想使用不同的时区,可以将 num2date
的 tz 关键字参数传递给你创建的任何日期刻度定位器或格式化器。这可以是 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)
可用的日期刻度定位器有:
MicrosecondLocator
: 定位微秒。SecondLocator
: 定位秒。MinuteLocator
: 定位分钟。HourLocator
: 定位小时。DayLocator
: 定位指定月份的日期。WeekdayLocator
: 定位一周中的天数,例如,MO, TU。MonthLocator
: 定位月份,例如,7 代表七月。YearLocator
: 定位年份,这些年份是基数的倍数。RRuleLocator
: 使用rrulewrapper
进行定位。rrulewrapper
是围绕 dateutil 的dateutil.rrule
的一个简单包装器,允许几乎任意的日期刻度规范。参见 rrule 示例。AutoDateLocator
:在自动缩放时,此类会选择最佳的DateLocator`(例如,`RRuleLocator
)来设置视图限制和刻度位置。如果调用时带有interval_multiples=True
,它将使刻度与刻度间隔的合理倍数对齐。例如,如果间隔是4小时,它将选择0、4、8等小时作为刻度。此行为默认情况下不保证。
日期格式化器#
可用的日期格式化器有:
AutoDateFormatter
:尝试找出最佳的格式使用。 当与AutoDateLocator
一起使用时,这是最有用的。ConciseDateFormatter
: 也尝试找出最佳的格式使用,并尽可能使格式紧凑,同时仍保留完整的日期信息。 这在使用AutoDateLocator
时最为有用。DateFormatter
: 使用strftime
格式字符串。
- 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
自动格式化日期标签。
- 参数:
- locator
ticker.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 的数学模式。
- locator
- 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小时。
- tz : str 或
- class matplotlib.dates.ConciseDateConverter(formats=None, zero_formats=None, offset_formats=None, show_offset=True, *, interval_multiples=True)[源代码][源代码]#
- 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)
- 参数:
- locator
ticker.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 的数学模式来渲染格式化器的结果。
- locator
示例
参见 使用 ConciseDateFormatter 格式化日期刻度
(
Source code
,2x.png
,png
)自动格式化日期标签。默认格式用于形成初始字符串,然后删除冗余元素。
- class matplotlib.dates.DateConverter(*, interval_multiples=True)[源代码][源代码]#
-
用于
datetime.date
和datetime.datetime
数据的转换器,或用于表示为date2num
转换的日期/时间数据。此类数据的'unit'标签为 None 或
tzinfo
实例。
- 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 的数学模式来渲染格式化器的结果。
- class matplotlib.dates.DateLocator(tz=None)[源代码][源代码]#
基类:
Locator
确定绘制日期时的刻度位置。
此类由其他定位器子类化,并不打算单独使用。
- 参数:
- tz : str 或
tzinfo
, 默认值:rcParams["timezone"]
(default:'UTC'
)str 或 刻度时区。如果是一个字符串,tz 会被传递给
dateutil.tz
。
- tz : str 或
- hms0d = {'byhour': 0, 'byminute': 0, 'bysecond': 0}#
- set_tzinfo(tz)[源代码][源代码]#
设置时区信息。
- 参数:
- tz : str 或
tzinfo
, 默认值:rcParams["timezone"]
(default:'UTC'
)str 或 刻度时区。如果是一个字符串,tz 会被传递给
dateutil.tz
。
- tz : str 或
- 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
。
- 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
。
- tz : str 或
- 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.datetime
或numpy.datetime64
或这些类型的序列datetime.datetime 或 numpy.datetime64 或这些的序列
- d :
- 返回:
- 浮点数或浮点数序列
自纪元以来的天数。 有关纪元的信息,请参见
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, dend
datetime
日期限制。
- delta
datetime.timedelta
日期的间距。
- dstart, dend
- 返回:
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
。
- 返回:
注释
假设使用的是公历;这并非普遍做法。详情请参阅模块文档字符串。
- 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 时,考虑的属性顺序为:
年
月
天
小时
会议记录
秒
微秒
最后,应用上述规则进行工作日计算。
例如
>>> 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
。
- matplotlib.dates.set_epoch(epoch)[源代码][源代码]#
设置日期时间计算的纪元(日期的起点)。
默认的纪元是
rcParams["dates.epoch"]
(默认是 1970-01-01T00:00)。如果需要微秒级的精度,绘制的日期需要在纪元时间的大约70年之内。Matplotlib内部将日期表示为自纪元以来的天数,因此浮点数的动态范围需要在2^52的因子内。
set_epoch
必须在任何日期被转换之前调用(例如在导入部分附近),否则将引发 RuntimeError。另请参阅 日期精度和历元。
- 参数:
- 时期str
可由
numpy.datetime64
解析的有效UTC日期(不包括时区)。