Python3.x datetime模块
1、时间间隔(timedelta)
指定时间长度之间计算差值
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import timedelta a=timedelta(days=3,hours=5) b=timedelta(hours=23.6) c = a + b # 最终计算结果 print(c) # 结果中有几天(向下取整,如果你奇怪时分秒消失的话) print(c.days) # 结果中有多少毫秒 print(c.microseconds) # 结果中有多少秒 print(c.seconds) # 结果中全部换算为秒,总共有多少秒 print(c.total_seconds()) # 查看最终结果的类型 print(type(c)) # timedelta类型最大时间 print(timedelta.max) # timedelta类型最小时间 print(timedelta.min) # timedelta类型的精度 print(timedelta.resolution)
运行结果为:
4 days, 4:36:00 4 0 16560 362160.0 <class 'datetime.timedelta'> 999999999 days, 23:59:59.999999 -999999999 days, 0:00:00 0:00:00.000001
当时,时间的差也是没有问题的。分钟、小时可以通过计算获得。
2、日期表示(date)
date由年月日组成,年的范围是[1,9999],月的范围是[1,12],日的范围根据年月来确定参数。
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import date import time # date对象的最大时间 print(date.max) # date对象的最小时间 print(date.min) # date对象的精度,单位为天 print(date.resolution) # 返回当前本地时间 print(date.today()) # 根据给定时间戳,返回date对象 print(date.fromtimestamp(time.time()))
运行结果为:
9999-12-31 0001-01-01 1 day, 0:00:00 2016-12-28 2016-12-28
date还提供了一些其他的实例和属性。
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import date import time # 构造新的date类 new=date(2016,11,12) # 打印当前类 print(new) # date类中的年月日单独输出 print(new.year) print(new.month) print(new.day) # 使用新的年月日替换原来的年月日属性(原属性不变) print(new.replace(month=8)) # 确认原属性没有变化 print(new) # 返回日期对应的time.struct_time对象 print(new.timetuple()) # 返回日期对应的Gregorian Calendar日期 print(new.toordinal()) # 返回weekday,周一是0,周二是1,以此类推 print(new.weekday()) # 同上面,区别是从1开始,周一是1,周二是2,以此类推 print(new.isoweekday()) # 返回年月日的元组 print(new.isocalendar()) # 返回格式为'YYYY-MM-DD’的字符串 print(new.isoformat()) # 自定义返回格式 print(new.strftime('%Y-%m-%d %H:%M:%S'))
运行结果为:
2016-11-12 2016 11 12 2016-08-12 2016-11-12 time.struct_time(tm_year=2016, tm_mon=11, tm_mday=12, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=317, tm_isdst=-1) 736280 5 6 (2016, 45, 6) 2016-11-12 2016-11-12 00:00:00
同时date类也可以进行运算
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import date, timedelta # 构造一个新的date类 new = date(2016, 11, 12) # 可以与一个时间间隔进行相加 new = new+timedelta(days=2, hours=5, minutes=30, seconds=59) print(new.strftime('%Y-%m-%d %H:%M:%S')) # 也可以与时间间隔相减 new = new-timedelta(days=2, hours=5, minutes=30, seconds=59) print(new.strftime('%Y-%m-%d %H:%M:%S')) # 进行时间的判断 print(new > date(2016, 12, 13)) print(new < date(2016, 12, 13)) # 两个date类相减,得到一个时间间隔类型 new = new - date(2016, 12, 13) print(new) print(type(new))
运行结果是:
2016-11-14 00:00:00 2016-11-12 00:00:00 False True -31 days, 0:00:00 <class 'datetime.timedelta'>
可以看到,和时间间隔相加减的时候并没有加减时分秒,因为date类的进度是天。
3、时间表示(time)
time类表示时间,由时、分、秒、微秒以及时区组成。时的范围为[0, 23],分的范围为[0, 59],秒的范围为[0, 59],microsecond的范围为[0, 999999]
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import time # time类的最大时间 print(time.max) # time类的最小时间 print(time.min) # time类的精度 print(time.resolution) # 构造一个新的time类 tm=time(hour=22,minute=21,second=6) print(tm) # 返回新time类的时分秒以及毫秒 print(tm.hour) print(tm.minute) print(tm.second) print(tm.microsecond) # 使用新属性替换原属性(原属性不变) print(tm.replace(hour=2,minute=6)) print(tm) # 返回形式为"HH:MM:SS"格式的字符串 print(tm.isoformat()) # 自定义返回字符串 print(tm.strftime('%H-%M-%S'))
运行结果是:
23:59:59.999999 00:00:00 0:00:00.000001 22:21:06 22 21 6 0 02:06:06 22:21:06 22:21:06 22-21-06
4、datetime类
datetime类就是date类和time类的结合,包含date类和time类的所有信息。
#!/usr/bin/env python __author__ = 'realtiger' """ @version: 3.5.1 @author: realtiger """ from datetime import datetime import time # datetime的最大时间,最小时间,精度 print(datetime.max) print(datetime.min) print(datetime.resolution) # 返回本地时间 print(datetime.today()) # 返回现在的时间,可以传入时区参数 print(datetime.now()) # 返回一个当前utc的时间 print(datetime.utcnow()) # 根据时间戮创建一个datetime对象,可以传入时区 print(datetime.fromtimestamp(time.time())) # 根据时间戮创建一个datetime对象 print(datetime.utcfromtimestamp(time.time())) # 将格式字符串转换为datetime对象 print(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S")) print(type(datetime.strptime("2016-12-31 19:25:3", "%Y-%m-%d %H:%M:%S"))) # 传入date对象和time对象构造一个datetime对象 # print(datetime.combine(date(year=2017,month=5,day=1),time(20,30,58))) # 构造一个datetime对象 dt=datetime(2016, 12, 31, 19, 35, 15) # 返回年月日时分秒微妙 print(dt.year) print(dt.month) print(dt.day) print(dt.hour) print(dt.minute) print(dt.second) print(dt.microsecond) # 返回date对象 print(dt.date()) # 返回time对象 print(dt.time()) # 替换datetime属性,原属性不变 print(dt.replace(year=2199,month=8,second=48)) # 返回日期对应的time.struct_time对象 print(dt.timetuple()) # 返回日期对应的time.struct_time对象 print(dt.utctimetuple()) # 返回日期对应的Gregorian Calendar日期 print(dt.toordinal()) # 返回weekday,从0开始 print(dt.weekday()) # 返回weekday,从1开始 print(dt.isoweekday()) # 返回年月日元组 print(dt.isocalendar()) # 返回格式化输出 print(dt.isoformat()) # 返回一个日期时间的C格式字符串 print(dt.ctime()) # 返回自定义格式化时间 print(dt.strftime('%Y-%m-%d %H:%M:%S'))
运行结果是:
9999-12-31 23:59:59.999999 0001-01-01 00:00:00 0:00:00.000001 2016-11-12 14:46:57.769252 2016-11-12 14:46:57.769251 2016-11-12 06:46:57.769251 2016-11-12 14:46:57.769252 2016-11-12 06:46:57.769252 2016-12-31 19:25:03 <class 'datetime.datetime'> 2016 12 31 19 35 15 0 2016-12-31 19:35:15 2199-08-31 19:35:48 time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=-1) time.struct_time(tm_year=2016, tm_mon=12, tm_mday=31, tm_hour=19, tm_min=35, tm_sec=15, tm_wday=5, tm_yday=366, tm_isdst=0) 736329 5 6 (2016, 52, 6) 2016-12-31T19:35:15 Sat Dec 31 19:35:15 2016 2016-12-31 19:35:15
同样的,datetime也可以进行比较以及相减运算
5、格式化字符串
以下是python手册中的格式化字符串的一些关键符号。
格式字符 意义
%a 英语星期的简写。如星期一为Mon
%A 英语星期的全写。如星期一为Monday
%b 英语月份的简写。如四月份为Apr
%B 英语月份的全写。如四月份为April
%c datetime的字符串表示。(如:16/09/08 11:32:35)
%d 当前时间是这个月中的第几天
%f 微秒(范围[0,999999])
%H 24小时制小时,范围是[0, 23]
%I 12小时制小时,范围是[0, 11]
%j 当前时间是当年中的第几天,范围是[001,366]
%m 月份,范围是[01,12]
%M 分钟,范围是[00,59]
%p 上下午标志(AM或者PM)
%S 秒,范围为[00,61]
%U 当前时间是当年中的第几周,星期天为每周的第一天
%w 当前时间是当周中的第几天,范围是[0, 6],6表示星期天
%W 当前时间是当年中的第几周,星期一为每周的第一天
%x 日期字符串(如:16/11/12)
%X 时间字符串(如:19:35:15)
%y 两个数字表示的年份
%Y 四个数字表示的年份
%z 与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z 时区名称(如果是本地时间,返回空字符串)
%% %% => %