1. dateutil 模块概述

dateutil 模块特点

  • 能够快速计算出相对时间例如下周、下个月、明年
  • 对指定两个日期或者日期对象进行计算出相对间隔
  • 能对多种时区文件进行解析例如UTC时区、tzinfo时区、Windows注册表时区
  • 支持包括RFC或者其他任何字符串格式的日期进行解析

dateutil 模块获取

dateuitl 模块为Python 第三方库,因此需要使用pip工具进行下载

1
pip install python-dateutil

dateutil 模块使用

  • dateutil 模块需要使用 from..import 导入

2. dateutil 相关方法

  • datetutil 模块提供7个模块

    方法 作用
    dateutil.parser 将字符串解析成datetime
    dateutil.rrule 将参数输出datetime.datetime格式的时间
    dateutil.relativedelta 时间偏移量
    dateutil.easter 复活节日期计算
    dateutil.tz 对datetime.tzinfo抽象类时区实现
    dateutil.utils 提供便利且实用功能来处理日期时间
    dateutil.zoneinfo 重建zoneinfo tar 内部时区信息(ftp.iana.org/tz)
  • dateutil 模块提供主要的方法

    • dateutil.parser.parse(string)将字符串解析成

      • string 可以为任何一个字符串
      • 时间字符串形式可以有逗号、斜杠、横杆等
    • datetimedateutil.rrule.rrule() 将参数输出datetime.datetime格式的时间

      rrule方法参数说明

      参数 含义
      freq 单位,可选的值为YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY,,MINUTELY,SECONDLY
      dtstart 开始时间,时间格式datetime.datatime类型
      interval 间隔
      wkst 周开始时间
      count 生产时间的个数
      until 结束时间,时间格式为datetime.dateatime类型
      bysetpos 必须为整数或者整数序列,设置匹配的周期频率
      bymonth 设置匹配的月份
      bymonthday 设置匹配每月的日期
      byyearday 设置匹配每年的天数
      byaster 设置匹配的复活节,星期天为0
      byweekno 设置匹配第几周
      byweekday MO,TU,WE,TH,FR,SA,SU
      byhour 设置匹配小时
      byminute 设置匹配分钟
      bysecond 设置匹配秒数
      cache 必须为布尔值,其实很启动缓存
    • dateutil.relativedelta.relativedelta()时间偏移量

      参数 说明
      year, month, day, hour, minute, second, microsecond 绝对单位,不会执行运算,会直接替换原始日期时间对应的值
      years, months, weeks, days, hours, minutes, seconds, microseconds 相对信息,可以为正数或复负数,会对原始日期时间进行相对值进行计算
      weekday 工作日增量值,可以为正数或者负数,例如MO(1),0=MO
      leepdays 给定日期中计算出润日
      yearday,nlyearday 设置年份为闰年或者非闰年,转换成日/月/闰日

PS: dateutil 模块官方手册 可以查看详细的用法案例

3. 小试牛刀

我们学习了dateutil模块相关的方法,来进行实操一下吧~

  • 使用parse解析时间字符串,rrule获取时间列表

    1
    2
    3
    4
    5
    6
    7
    from dateutil.rrule import *

    def get_two_datelist(sdate,edate):

    return list(rrule(DAILY,dtstart=parse(sdate),until=parse(edate)))

    print(get_two_datelist("2021-11-1","2021-11-10"))

    [datetime.datetime(2021, 11, 1, 0, 0),
    datetime.datetime(2021, 11, 2, 0, 0),
    datetime.datetime(2021, 11, 3, 0, 0),
    datetime.datetime(2021, 11, 4, 0, 0),
    datetime.datetime(2021, 11, 5, 0, 0),
    datetime.datetime(2021, 11, 6, 0, 0),
    datetime.datetime(2021, 11, 7, 0, 0),
    datetime.datetime(2021, 11, 8, 0, 0),
    datetime.datetime(2021, 11, 9, 0, 0),
    datetime.datetime(2021, 11, 10, 0, 0)]

  • 获取指定间隔的时间列表

    1
    2
    3
    4
    5
    def get_two_date_interval(sdate,edate):

    return relativedelta(parse(sdate),parse(edate))

    print(get_two_date_interval("2021-10-21","2021-11-10"))