本文紧承上一篇 Python 常用日期处理,因制于篇幅的大小需求才临时分立新篇,这里要简单提到 calendar 和 dateutil 模块的使用,其中 calendar 是 Python 内置的。相比于上一篇而言,此处主旨会更明确一些,只记录三个应用案例,分别是

用 dateutil 灵活的解析 datetime 字符串

给定起始日期后的连续日期

给定起始日期后连续的月末日期

dateutil 灵活的解析 datetime 字符串

使用 Python 内容的 date 或 datetime, 构造它们的实例时需要逐个的传入年月日或时分秒,或者要调用 fromisoformat()方法解析严格的字符串表示格式。而 dateutil.parser 的 parse() 方法就显得特别的聪明和随意,它可以智能的解析更丰富的字符串表示方式。详细的支持格式请参考官方文档的 parse examples,恐怕官方文档也未列举完全,只要觉得合理的时间字符串就可以尝试去解析。下方是一些例子

>>> from dateutil.parser import parse

>>>

>>> parse('2018-02-28')

datetime.datetime(2018, 2, 28, 0, 0)

>>> parse('2018-02-28T12:08:23')

datetime.datetime(2018, 2, 28, 12, 8, 23)

>>> parse('2018-02-28T12:08:23PM') # 下午

datetime.datetime(2018, 2, 28, 12, 8, 23)

>>> parse('2018-02-28T12:08:23+05:00') # 加上时区偏移

datetime.datetime(2018, 2, 28, 12, 8, 23, tzinfo=tzoffset(None, 18000))

>>> parse('Jan 18, 2018')

datetime.datetime(2018, 1, 18, 0, 0)

>>> parse('Oct. 10, 2008 10:43am CST') # 加上时区

datetime.datetime(2008, 10, 10, 10, 43, tzinfo=tzlocal())

>>> parse('Wed Jul 08 17:08:48 GMT 2009')

datetime.datetime(2009, 7, 8, 17, 8, 48, tzinfo=tzutc())

>>> parse("09-25-2003")

datetime.datetime(2003, 9, 25, 0, 0)

>>> parse("13-02-2003") # 第一段大于 12 不可能是月份,所以推断为日期

datetime.datetime(2003, 2, 13, 0, 0)

>>>parse('09:23pm')

datetime.datetime(2019, 4, 30, 21, 23)

parser.parse() 返回的总是 datetime 类型,这也很好理解,因为 datetime 有完整的时间信息,可由此得到 date 或 time 实例。

给定起始日期后的连续日期

从一个给定日期一天天往后推可以直接用 Python 内置的 datetime(date 和 timedelta),还用不上 calendar 模块

>>> from datetime import date, timedelta

>>> start_date = date(2018, 2, 25)

>>> for i in range(1, 10):

... print(start_date + timedelta(days = i))

...

2018-02-26

2018-02-27

2018-02-28

2018-03-01

2018-03-02

2018-03-03

2018-03-04

2018-03-05

2018-03-06

使用 timedelta 来计算日期偏移只能支持以下的度量

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

不能按月,年来换算,而 dateutil.relativedelta 就更强大了,看下它的构造函数

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)

我们可以换用 relativedelta 来重写上面的代码

>>> from datetime import date

>>> from dateutil.relativedelta import relativedelta

>>> start_date = date(2018, 2, 25)

>>> for i in range(1, 10):

... print(start_date + relativedelta(days = i))

...

2018-02-26

2018-02-27

2018-02-28

2018-03-01

2018-03-02

2018-03-03

2018-03-04

2018-03-05

2018-03-06

如果想要推算下一个,下一个月,或下下年就需要用 relativedelta。

给定起始日期后连续的月末日期

假如用 relativedelta 按月推算日期的话就要涉及到 calendar 模块了,因为无论 30 天往下推算或是 relativedelta(months = 1) 得到的都可能不是自己想要的结果。例如

2019-01-30 + relativedelta(months = 1) 是 2019-02-28

2019-02-28 + relativedelta(months = 1) 是 2019-03-28

日期部分飘忽不定,这种按月推演出的结果没多大意思,一般来说我们可能需要的是每个月月末日期,可以使用 calendar 来确定指定年月的最小和最大日期。

>>> from datetime import date

>>> from dateutil.relativedelta import relativedelta

>>> from calendar import monthrange

>>>

>>> monthend = date(2019, 1, 31)

>>> for i in range(1, 10):

... dd = monthend + relativedelta(months = i)

... dd = dd.replace(day = monthrange(dd.year, dd.month)[1])

... print(dd)

...

2019-02-28

2019-03-31

2019-04-30

2019-05-31

2019-06-30

2019-07-31

2019-08-31

2019-09-30

2019-10-31

Python 自带的 calendar 模块还有许多好玩的函数,如对星期,月份的遍历,真正的日历输出为文本或 HTML 代码的功能,详情请见Python CALENDAR Tutorial with Example.

来份简单的例子

>>> import calendar

>>> c = calendar.TextCalendar(calendar.SUNDAY)

>>> str = c.formatmonth(2019, 4)

>>> print(str)

April 2019

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30

显示出与 bash 命令 cal -h 4 2019一样的内容。

以上就是Python 日期处理 -- calendar 与 dateutil 模块的详细内容,更多关于python 日期处理的资料请关注脚本之家其它相关文章!

python dateutil_Python 常用日期处理 -- calendar 与 dateutil 模块的使用相关推荐

  1. python中处理日期和时间的标准模块是-Python时间相关处理

    日期和时间数据类型及工具 python标准库包含于日期(data)和时间(time)数据的数据类型,datetime ime以及calendar模块会被经常用到 datetime以毫秒形式存储日期和时 ...

  2. python日历库_Python(19):Python标准库: 日期、时间和日历模块

    一.time时间模块 import time 1 .时间戳:time.time() 时间戳(timestamp):时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 时间戳单位最 ...

  3. python中处理日期和时间的标准模块是-关于时间和Python的时间处理模块

    概念 关于时间你因该了解的几个概念: 秒 在1967年的第13届国际度量衡会议上决定以原子时定义的秒作为时间的国际标准单位:铯133原子基态的两个超精细能阶间跃迁对应辐射的9,192,631,770个 ...

  4. python中处理日期和时间的标准模块是-2019python常见的170道面试题解析

    语言特性 1.谈谈对 Python 和其他语言的区别 2.简述解释型和编译型编程语言 3.Python 的解释器种类以及相关特点? 4.说说你知道的Python3 和 Python2 之间的区别? 5 ...

  5. python中处理日期和时间的标准模块是-Python time模块参考手册

    Python的time模块提供了各种操作时间的功能.在大多数的编程语言中,表示时间的方法有两种,一是时间戳.即从1970年1月1日00:00:00开始按秒计算的偏移量:二是该语言自己的数据结构.Pyt ...

  6. python中处理日期和时间的标准模块是-datetime

    datetime是Python处理日期和时间的标准库. 获取当前日期和时间 我们先看如何获取当前日期和时间: >>> from datetime import datetime &g ...

  7. Python学习八:pip 最常用命令、pip升级、pip 清华大学开源软件镜像站、Python日期和时间(Time模块、日历(Calendar)模块)

    pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 注意:Python 2.7.9 + 或 Python 3.4+ 以上版本都自带 pip 工具. p ...

  8. Python时间与日期操作(datetime、time、calendar)

    转载自:Python时间与日期操作(datetime.time.calendar) - 阳光宝贝-沐沐 - 博客园 相关模块 模块 说明 time time是一个仅包含与日期和时间相关的函数和常量的模 ...

  9. python如何输出日期_Python日期常用操作

    Python日期与字符串互转 1⃣️str -> date importdatetime detester = '2017-01-01' d1 = datetime.datetime.strpt ...

最新文章

  1. 跨镜追踪“智”眼识人技术策略研究及实现
  2. MailBee.NET Objects撰写邮件教程(一):添加和删除自定义标题
  3. 利用JSON-schema校验请求报文,封装转换错误信息,提示前台
  4. 缓解数据包丢失对WAN的影响是当务之急—Vecloud微云
  5. 拼夕夕是如何“套路”你的隐私的?
  6. 【数字图像处理】图像内插“双线性内插法 Bilinear interpolation”代码演示(以像素中心点确定像素位置)(图像放大缩小)具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊
  7. unite testing
  8. php excel header,【IT专家】PHP生成excel,方法一-header生成
  9. matlab ofdmmodulator,那位高手指点一下OFDM的基本仿真,用MATLAB,谢谢了
  10. linux之ClamAV杀毒软件安装配置
  11. python车牌识别系统开源代码_TensorFlow车牌识别完整版代码(含车牌数据集)
  12. javascript常用函数大全
  13. 基于Springboot+Vue.js的校园二手商城
  14. python求最值_python求极值点(波峰波谷)
  15. HTML旅游景点网页作业制作——旅游中国11个页面(HTML+CSS+JavaScript)
  16. python编码器用什么_用于ceasar-ciph的python构建编码器
  17. 适合新手小白的苹果CMS安装与配置
  18. Android 之 自动拨号
  19. 分布式理论(六)—— Raft 算法
  20. 2021年十大开源web应用防火墙

热门文章

  1. 计算机毕业设计java+ssm的仓库进销存系统(源码+系统+mysql数据库+Lw文档)
  2. 电脑WLAN连接异常:自上次连接后,某些信息已更改。我们还需要一些信息才能完成连接。
  3. 笔记本电脑无法连投影仪的问题
  4. 2020年团体程序设计天梯赛-总决赛 L3-3 可怜的复杂度
  5. Ubuntu 18.04安装Adams 2021
  6. 关于桌面发布时报错Failed Read-only file system
  7. HighTec编译器获取不到license常见原因
  8. 手把手教你用artifactory搭建maven私有仓库
  9. 南邮软件设计matlab,通信软件设计基础,南邮,实验报告(共10篇).doc
  10. C语言实现移位密码体制