Python日期时间模块Dateutil

Dateutil模块

    • 1、Dateutil库简介
    • 2、Dateutil库常用模块


1、Dateutil库简介


dateutil模块是由Gustavo Niemeyer在2003年编写而成的对日期时间操作的第三方模块

dateutil模块对Python内置的datetime模块进行扩展时区和解析

dateutil库主要有两个模块:parser和rrule,其中parser可以将字符串解析成datetime,而rrule则是根据定义的规则来生成datetime

dateutil模块特点:

  • 能够计算日期时间相对增量,例如下周、下个月、明年、每月的最后一周等
  • 可以计算两个给定日期和/或日期时间对象之间的相对增量
  • 支持多种时区格式文件的解析,例如UTC时区、TZ时区等
  • 支持包括RFC字符串或其他任何字符串格式的通用日期时间解析

官方文档:http://labix.org/python-dateutil

安装:

pip install python-dateutil

2、Dateutil库常用模块


dateutil库常用模块有三个:parser、rrule和relativedelta

from dateutil import parser, rrule, relativedelta
# dateutil.parser:将字符串解析成datetime
# dateutil.rrule:将参数输出datetime.datetime格式的时间
# dateutil.relativedelta:日期时间偏移量

2.1、parser

parser用于将字符串解析成datetime,字符串可以很随意,可以用日期时间的英文单词,可以用横线、逗号、空格等做分隔符

'''
parser.parse(str)
- str:字符串
'''

parser使用示例如下:

# 没指定时间默认0点,没指定日期默认当天,没指定年份默认当年
# 当年份放在前面时,只能按年月日的顺序
print(parser.parse('2023-11-29'))          # 2023-11-29 00:00:00
print(parser.parse('10:45:52'))            # 2023-11-29 10:45:52
print(parser.parse('20231129'))            # 2023-11-29 00:00:00
print(parser.parse('2023.11.29'))          # 2023-11-29 00:00:00
print(parser.parse('2023/11/29'))          # 2023-11-29 00:00:00# fuzzy:开启模糊匹配,过滤无法识别的时间日期字符
print(parser.parse('Today is 11-29 10:45, I feel good.', fuzzy=True))   # 2023-11-29 10:45:00# 当只有月日时,parser会将分隔符前面的数字解析为月份,后面的为日
# 当有年份时,在前面的月份超出范围时,会自动判断哪个是月哪个是日
# 11.29解析结果异常,11-29、11/29可正常解析
print(parser.parse('11-29'))               # 2023-11-29 00:00:00
print(parser.parse('11/29/2023'))          # 2023-11-29 00:00:00# 当前面的月份超过12时,parser会自动识别月和日
print(parser.parse('29/11/2023'))          # 2023-11-29 00:00:00# 当分隔符为逗号时,只有月日时,要把月放在后面
# 当分隔符为逗号时,有年份时,年份要放在后面,要把月放在前面
print(parser.parse('29,11'))               # 2023-11-29 00:00:00
print(parser.parse('11,29,2023'))          # 2023-11-29 00:00:00# 识别英文的月、日
print(parser.parse('November 29'))         # 2023-11-29 00:00:00
print(parser.parse('November 1st'))        # 2023-11-01 00:00:00
print(parser.parse('November 29 2023'))    # 2023-11-29 00:00:00
print(parser.parse('2023 November29'))     # 2023-11-29 00:00:00
print(parser.parse('11:45 AM'))            # 2023-11-29 11:45:00

2.2、rrule

rrule用于将字符串解析成datetime

'''
rrule.rrule(freq,dtstart,interval,wkst,count,until,by)
- freq:单位,可选的值为YEARLY、MONTHLY、WEEKLY、DAILY、HOURLY、MINUTELY、SECONDLY,即年月日周时分秒
- dtstart、until:开始和结束时间,时间格式datetime.datatime类型
- interval:间隔
- wkst:周开始时间
- count:生产时间的个数
- by:指定匹配的周期,例如,byweekday=(MO,TU):只有周一周二的匹配,取值如下:- bysetpos:必须为整数或者整数序列,设置匹配的周期频率- bymonth:设置匹配的月份- bymonthday:设置匹配每月的日期- byyearday:设置匹配每年的天数- byweekno:设置匹配第几周- byweekday:MO,TU,WE,TH,FR,SA,SU- byhour:设置匹配小时- byminute:设置匹配分钟- bysecond:设置匹配秒数
'''

rrule使用示例如下:

# 生成一个连续的日期列表
print(list(rrule.rrule(rrule.DAILY, dtstart=parser.parse('2023-11-29'), until=parser.parse('2023-12-3'))))
'''
[datetime.datetime(2023, 11, 29, 0, 0), datetime.datetime(2023, 11, 30, 0, 0), datetime.datetime(2023, 12, 1, 0, 0), datetime.datetime(2023, 12, 2, 0, 0), datetime.datetime(2023, 12, 3, 0, 0)]
'''# 间隔一天
print(list(rrule.rrule(rrule.DAILY, interval=2, dtstart=parser.parse('2023-11-29'), until=parser.parse('2023-12-3'))))
'''
[datetime.datetime(2023, 11, 29, 0, 0), datetime.datetime(2023, 12, 1, 0, 0), datetime.datetime(2023, 12, 3, 0, 0)]
'''# 只保留前3个元素
print(list(rrule.rrule(rrule.DAILY, count=3, dtstart=parser.parse('2023-11-29'), until=parser.parse('2023-12-3'))))
'''
[datetime.datetime(2023, 11, 29, 0, 0), datetime.datetime(2023, 11, 30, 0, 0), datetime.datetime(2023, 12, 1, 0, 0)]
'''# 只取周六和周日日期时间
print(list(rrule.rrule(rrule.DAILY, byweekday=(rrule.SA, rrule.SU), dtstart=parser.parse('2023-11-29'), until=parser.parse('2023-12-3'))))
'''
[datetime.datetime(2023, 12, 2, 0, 0), datetime.datetime(2023, 12, 3, 0, 0)]
'''# 以月为间隔,生成3个月
print(list(rrule.rrule(rrule.MONTHLY, count=3, dtstart=parser.parse('2023-11-01'))))
'''
[datetime.datetime(2023, 11, 1, 0, 0), datetime.datetime(2023, 12, 1, 0, 0), datetime.datetime(2024, 1, 1, 0, 0)]
'''# rrule计算日期时间差
# rrule可计算出两个datetime对象间相差的年月日等时间数量
print(rrule.rrule(rrule.DAILY, dtstart=parser.parse('20231129'), until=parser.parse('20231203')).count())    # 5
# 不足N个月的,按N个月计算;不满整月的,按N-1个月计算
print(rrule.rrule(rrule.MONTHLY, dtstart=parser.parse('20231101'), until=parser.parse('20240115')).count())  # 3

2.3、relativedelta

relativedelta主要用于日期时间偏移

'''
relativedelta.relativedelta()
'''

relativedelta使用示例如下:

# datetime.timedelta与relativedelta.relativedelta()
from datetime import datetime, timedelta# timedelta仅支持:weeks、days、hours、minutes、seconds,不支持月、年
# datetime.timedelta()计算上周
print(datetime.strftime(datetime.now() - timedelta(weeks=1), '%Y%m%d'))   # 20231122
# relativedelta.relativedelta()计算上周
print(datetime.strftime(datetime.now() - relativedelta.relativedelta(weeks=1), "%Y%m%d"))   # 20231122# 计算上月初、计算上N月初
print(datetime.strftime(datetime.now() - relativedelta.relativedelta(months=1), "%Y%m01"))   # 20231001
# 计算上月末、计算上N月末
print(datetime.strftime(datetime.strptime(datetime.now().strftime('%Y-%m-01'), '%Y-%m-%d') - relativedelta.relativedelta(days=1), '%Y%m%d'))   # 20231031

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS特效021:蛇形左右扭动的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧,主要包含CSS布局,CSS特效,CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点,CSS特效主要是一些动画示例,CSS花边是描述了一些CSS…

新手老师如何管理班级的日常工作

作为一名新手老师,管理班级的日常工作可能会是一项挑战,但以下是一些可能有用的建议: 建立良好的班级文化 班级文化是班级氛围的重要组成部分,对于学生的学习和成长具有重要影响。作为老师,要积极营造一种积极向上、团…

电脑IP地址怎么修改?http代理ip设置方法有哪些?

在互联网时代,我们的网络已经成为我们生活、工作和学习中不可或缺的一部分。有时候,为了保护我们的隐私或者突破网络限制,我们需要修改电脑的IP地址。那么,电脑IP地址怎么修改呢?http代理ip设置方法有哪些呢&#xff1…

怎么检测电脑电源?电脑电源检测系统软件如何助力?

电源是电脑的重要组成部分,为电脑提供稳定电源,保证电脑正常工作。但是在电脑实际使用过程中总会遇到各种各样的问题和故障,比如无法开机,因此电脑电源检测是非常重要的测试内容。 如何测试电脑电源? 1. 用万用表检测 a. 将万用表…

linux命令解析神器

遥想刚迈入职场时(当时的工作环境,需要频繁使用linux,登录设备后台操作),偶然间听到我的领导和其他同事说 :“XXX,多学一学。大佬们太厉害了,太低级的问题不要直接问,你登…

HarmonyOS将程序下载并运行到真机上 (华为手机为例)

前面的文章 我们讲到过一些关于这个预览器的操作 可以在上面看到我们代码的一个整体效果 但其实 这边可以真实的运行在我们自己的手机上 因为你这个预览器再好 还是和实际的手机环境有所偏差 首先 我们要设置一下手机 我们在设置中 找到 关于手机 然后 这下面 有一个 Harmo…

QCS2290 DFOTA重启后无法切换分区

在做了OTA升级后重启后,设备一直重启,多次重启后会正常进入slot A分区 开机log如下: Active Slot _b is bootable, retry count 4 Booting from slot (_b) .... [ 14.470311] device-mapper: verity-fec: 253:11: FEC: recursion too dee…

Redis学习文档

目录 一、概念1、特征2、关系型数据库和非关系型数据库的区别3、键的结构4、Redis的Java客户端5、缓存更新策略5.1、概念5.2、代码 6、缓存穿透6.1、含义6.2、解决办法6.3、缓存空值代码举例6.4、布隆过滤器代码举例 7、缓存击穿7.1、概念7.2、解决办法7.3、互斥锁代码举例7.4、…

[PyTorch][chapter 2][李宏毅深度学习-Regression]

前言: Regression 模型主要用于股票预测,自动驾驶,推荐系统等领域. 这个模型的输出是一个scalar。这里主要以下一个线性模型为基础 它是神经网络的基础模块, 目录: 总体流程 常见问题 Numpy 例子 PyTorch 例子 一 总体流程 1 : 建…

【Python百宝箱】数据舞台:Python数据库实战手册

前言 在现代软件开发中,数据的存储和管理是至关重要的一环。Python作为一门广泛应用于各种领域的编程语言,拥有丰富而强大的数据库相关库,能够满足不同项目的需求。本文将深入研究几个重要的Python数据库库,涵盖了关系型数据库、…

智慧工地解决方案,Spring Cloud智慧工地项目平台源码

智慧工地一体化信息管理平台源码,微服务架构JavaSpring Cloud UniApp MySql 智慧工地云平台是专为建筑施工领域所打造的一体化信息管理平台。通过大数据、云计算、人工智能、物联网和移动互联网等高科技技术手段,将施工区域各系统数据汇总,建…

15.Docker-Compose的概念理解及安装

1.Docker-Compose是什么? Docker-Compose是实现对Docker容器集群的快速编排的工具软件。它是Docker官方开源的一个工具软件,可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml.写好多个容器间的调用关系&#x…

京东大数据(京东运营数据采集):2023年10月京东牛奶乳品行业品牌销售排行榜

鲸参谋监测的京东平台10月份牛奶乳品市场销售数据已出炉! 10月份,牛奶乳品整体销售上涨。鲸参谋数据显示,今年10月,京东平台上牛奶乳品的销量将近1700万,同比增长1%;销售额将近17亿,同比增长约5…

C语言常见算法

算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使…

在ubuntu系统安装SVN服务端,并通过客户端进行远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Python与GPU编程快速入门(三)

3、使用Numba加速Python代码 Numba 是一个 Python 库,它使用行业标准 LLVM 编译器库在运行时将 Python 函数转换为优化的机器代码。 您可能想尝试用它来加速 CPU 上的代码。 然而,Numba还可以将Python 语言的子集转换为CUDA,这就是我们将在这里使用的。 所以我们的想法是,…

【C 语言经典100例】C 练习实例7

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 程序分析:字符共有256个。不同字符,图形不一样。 VC6.0下出现中文乱码(原因解决方法): 176的16进制是B0,219的16进制是DB&#xf…

常见的6种工业主板盘点

无论您涉及哪种类型的工业环境,主板都是所有电子元件的关键部件之一。可靠且高效的主板是任何功能系统的核心和灵魂。 不同的主板旨在满足不同的需求,如果您希望系统发挥最佳性能,则必须了解这些需求。本文提供了有关当今流行的6种工业主板的…

c语言编程题经典100例——(41~45例)

1,实现动态内存分配。 在C语言中&#xff0c;动态内存分配使用malloc、calloc、realloc和free函数。以下是一个示例&#xff1a; #include <stdio.h> #include <stdlib.h> int main() { int *ptr NULL; // 初始化为空 int n 5; // 假设我们想要分配5个整数…

Windows如何启动MySQL

手动启动MySQL服务 如果您选择手动启动MySQL服务&#xff0c;则需要在“服务”控制面板中手动启动MySQL服务。步骤如下&#xff1a; 1&#xff09;按下WinR键打开运行窗口&#xff0c;输入services.msc并回车。 2&#xff09;在服务管理器中&#xff0c;搜索MySQL服务&#…