本文根据Python2的官方文档展开,链接在此。
1. datetime模块介绍:
有下面几种类:
datetime.date
就是存的公历日期,有三个属性,year,month,day
datetime.time
存的是时间,属性有hour, minute, second, microsecond, and tzinfo。没有年月日
datetime.datetime
存的是日期和时间,属性有year, month, day, hour, minute, second, microsecond, and tzinfo.
datetime.timedelta
存的是日期或时间差,精度是microsecond。正值对应更晚的时间或日期。比如
import datetime
oneDay = datetime.timedelta(days = 1)
!!!注意!!!
timedelta的最大单位是days,所以不要指望能够加一个月甚至一年!
datetime.tzinfo
是跟time zone相关,在不同时区转换中有用。
2. 日期操作
对于date objects,有三种方式,链接在这里。这里就讲讲我自己常用的:
建立date对象:
可以从date.today()建立当前日期的date对象
也可以直接用date命令直接建立。比如
也可以用datetime.strptime()先建立datetime对象,再用.date()命令将datetime转换成date。比如
import datetime
today1 = datetime.date.today()
today2 = datetime.date(2019, 4, 20)
today3 = datetime.datetime.strptime('2019-04-20', '%Y-%m-%d')
today4 = today3.date()
date的变换/操作
对已有的date,加减timedelta获得新的日期。
也可用replace命令,将年、月、日中的一个或多个替换成指定值。
两个date之间的减法将得到timedelta,对应日期差。
返回成字符串:
date对象可以用.isoformat()命令直接返回'2019-02-28'这样的string
date对象在如果用print(),或者%s的格式化字符串打出的就是'2019-02-28'这样的string。
也可用date.strftime(format)命令,返回其他指定格式的日期字符串。
3. datetime和date之间转换:
datetime转date只需要用.date()命令,date转datetime需要补上后面的时间,所以代码中有一个datetime.datetime.min.time()。如下:
import datetime
# convert date to datetime
todayDate = datetime.date.today()
todayDatetime = datetime.datetime.combine(todayDate, datetime.datetime.min.time())
# convert datetime to date
nowDatetime = datetime.datetime.now()
nowDate = nowDatetime.date()
4. 截取当前时间,计算时间差
这个的典型应用就是记录程序、模块、代码的运行起止时间和耗时,可以用datetime记录当前时刻,然后用两个datetime相减,获得日期和时间差,前面说过了两个datetime相减的日期和时间差将以timedelta来保存。
datetime.datetime.timedelta有三个属性:
days:时间差是多少天
seconds:时间差是多少秒
microseconds:时间差是多少微秒
5. 小总结:
# import datetime
# 1. 显示当前时间
now_datetime = datetime.datetime.now()
print(now_datetime)
2019-04-27 21:45:11.753420
type(now_datetime)
<type 'datetime.datetime'>
# 2. strftime和strptime
# strptime是将字符串转换成datetime的date或datetime或time类型
# strftime是将datetime的date或datetime或time类型转换成字符串
# 比如
date1 = datetime.date(2019, 4, 27)
date_str2 = datetime.datetime.strftime(date1, '%Y-%m-%d')
datetime3 = datetime.datetime.strptime(date_str2, '%Y-%m-%d')
date4 = datetime.datetime.strptime(date_str2,'%Y-%m-%d').date()
PS:
1. 注意几个坑:
timedelta的最大单位是days,所以不能用它直接加一个月或一年。
replace的时候,小心变量不要超出范围,比如月份大于12或小于1之类的。
2. strftime()和strptime()用到的format:
可以参考这个链接。典型的比如:
%y,年份后两位,%Y年份四位
%m,月份两位数字
%d,日期两位数字
%H,小时两位数字
%M,分钟两位数字
%S,秒两位数字