1. 日期的转换及运算
datetime模块可以处理基本的日期转换及运算,主要是用到datetime和timedelta两个类;计算的时候datetime会自动处理闰年。
如果要求还要更高,需要处理时区,模糊时间范围,节假日等,就需要用dateutil模块,主要有relativedelta()函数。
>>> from datetime import datetime, timedelta
>>> d = datetime(2017, 10, 1)
>>> delta = timedelta(days=8, hours=10.5)#还可以有参数minutes,seconds
>>> delta.seconds / 3600 #求小时
10.5
>>> delta.total_seconds() / 3600 #全部转换为小时
202.5
>>> a = d+delta
>>> a
datetime.datetime(2017, 10, 9, 10, 30)
>>> a = datetime(2012, 3, 1)
>>> b = datetime(2012, 2, 28)
>>> (a - b).days #自动计算闰年
2
>>> from dateutil.relativedelta import relativedelta #这个模块需要安装:pip install python-dateutil
>>> d + relativedelta(months=+1, days=-10) #参数很多,可根据需要参考说明
datetime.datetime(2017, 10, 22, 0, 0)
>>> a-d
datetime.timedelta(8, 37800)
>>> relativedelta(a, d)
relativedelta(days=+8, hours=+10, minutes=+30)
2. 字符串转日期
使用datetime模块的strptime()方法。
strptime() 的性能要比你想象中的差很多,因为它是使用纯Python 实现,并且必须处理所有的系统本地设置。如果你要在代码中需要解析大量的日期并且已经知道了日期字符串的确切格式,可以自己实现一套解析方案来获取更好的性能:比如用datetime(year, month,day)直接构建日期。
>>> text = '2017-11-10'
>>> d = datetime.strptime(text, '%Y-%m-%d')
>>> n = datetime.today()
>>> n-d
datetime.timedelta(-22, 58358, 967057)
3. 结合时区的日期操作
对几乎所有涉及到时区的问题,你都应该使用pytz 模块。这个包提供了Olson 时区数据库,它是时区信息的事实上的标准,在很多语言和操作系统里面都可以找到。但是pytz需要自己安装哦。