Python中提供了时间相关的内置模块,我们主要用的是:time模块、datetime模块和calendar模块
⽇期格式化的标准:
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m ⽉份(01-12) %d ⽉内中的⼀天(0-31) %H 24⼩时制⼩时数(0-23) %I 12⼩时制⼩时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的⽉份名称 %B 本地完整的⽉份名称 %c 本地相应的⽇期表示和时间表示 %j 年内的⼀天(001-366) %p 本地A.M.或P.M.的等价符 %U ⼀年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W ⼀年中的星期数(00-53)星期⼀为星期的开始 %x 本地相应的⽇期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
一、时间相关的术语
-
UTC time Coordinated Universal Time,世界协调时,又称 格林尼治天文时间、世界标准时间。与UTC time对应的是各个时区的local time,东N区的时间比UTC时间早N个小时,因此UTC time + N小时 即为东N区的本地时间;而西N区时间比UTC时间晚N个小时,即 UTC time - N小时 即为西N区的本地时间; 中国在东8区,因此比UTC时间早8小时,可以以UTC+8进行表示。
-
epoch time 表示时间开始的起点;它是一个特定的时间,不同平台上这个时间点的值不太相同,对于Unix而言,epoch time为 1970-01-01 00:00:00 UTC。
-
timestamp(时间戳) 也称为Unix时间 或 POSIX时间;它是一种时间表示方式,表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但是有些编程语言的相关方法返回的是秒数(Python就是这样),这个需要看方法的文档说明。需要说明的是时间戳是个差值,其值与时区无关。
一、time模块
1、时间戳(timestamp):时间戳使用的是从1970年01月01日 00点00分00秒到现在一共经过了多少秒。。。使用的是float来表示。
import time # time.time() 表示时间戳 s=time.time()#1542167172.0260832 数据库中存储采用的是这种时间
2、格式化时间(strftime):这个时间主要可以把时间进行任意的格式化输出。
import time s2=time.strftime("%Y-%m-%d %H:%M:%S") #2018-11-14 19:27:47
3、结构化时间(struct_time):这个时间主要可以把时间分类划分。
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=12, tm_min=3, tm_sec=9, tm_wday=2, tm_yday=318, tm_isdst=0)
4、三种时间之间的转换
时间戳 -> 结构化时间:time.localtime( 时间戳)、time.gmtime( 时间戳)
import time s=time.localtime(18888888) #时区问题 gmtime :格林尼治时间 # time.struct_time(tm_year=1970, tm_mon=8, tm_mday=7, # tm_hour=22, tm_min=54, tm_sec=48, tm_wday=4, tm_yday=219, tm_isdst=0)
结构化时间 -> 格式化时间:time.strftime(时间格式,结构化时间)
import time s=time.localtime() s2=time.strftime("%Y-%m-%d %H:%M:%S",s) print(s2) #2018-11-14 19:47:30
格式化时间 ->结构化时间:time.strptime(格式化时间,相应的格式字符串)
import time s1="1995-3-15 03:29:37" struct_s1=time.strptime(s1,"%Y-%m-%d %H:%M:%S") print(struct_s1) #time.struct_time(tm_year=1995, tm_mon=3, tm_mday=15, #tm_hour=3, tm_min=29, tm_sec=37, tm_wday=2, tm_yday=74, #tm_isdst=-1)
结构化时间 -> 时间戳:time.mktime(结构化时间)
import time s=time.localtime() s2=time.mktime(s) print(s2)#1542196252.0
5、时间差的计算
计算时间差 # 假定给两个时间 import time s1="2017-9-20 03:29:37" s2="2018-3-15 12:3:55" # # 格式化时间 -> 结构化时间 struct_s1=time.strptime(s1,"%Y-%m-%d %H:%M:%S") struct_s2=time.strptime(s2,"%Y-%m-%d %H:%M:%S") # 结构化时间 -> 时间戳 s1_chou=time.mktime(struct_s1) s2_chou=time.mktime(struct_s2) time_cha=abs(s2_chou-s1_chou) # 时间戳-> 结构化时间 new_time=time.gmtime(time_cha) # time.struct_time(tm_year=1996, tm_mon=7, tm_mday=29, tm_hour=17, tm_min=1, tm_sec=19, tm_wday=0, tm_yday=211, tm_isdst=0) y_cha=new_time.tm_year-1970 m_cha=new_time.tm_mon-1 d_cha=new_time.tm_mday-1 H_cha=new_time.tm_hour M_cha=new_time.tm_min S_cha=new_time.tm_sec print("两个时间相隔 %s 年 %s 月 %s 日 %s 时 %s 分 %s 秒"% (y_cha,m_cha,d_cha,H_cha,M_cha,S_cha)) import time true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S')) time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S')) dif_time=time_now-true_time struct_time=time.gmtime(dif_time) print(struct_time) print('过去了%d年%d⽉%d天%d⼩时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour,struct_time.tm_min,struct_time.tm_sec)) #
利用时间戳计算时、分、秒
hours=dif_time//3600 minute=dif_time%3600//60 secend=dif_time%3600%60 print("过去了 %s 小时 %s 分钟 %s秒"%(hours,minute,secend))
二、datetime模块
三、calendar模块
1、calendar.calendar(year,w=2,l=1,c=6) 返回某年的日历,每日宽度w字符,每行21*w+8+2*c,i表示星期
2、calendar.firstweekday( ) 返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。
3、calendar.isleap(year) 判断是否为润年
4、calendar.leapdays(y1,y2) 返回[y1, y2)润年总数
5、calendar.month(year,month,w=2,l=1) 返回某年某月的的日历
6、calendar.monthcalendar(year,month) 返回某年某月日历,以列表形式显示
7、calendar.setfirstweekday(weekday) 设置每周的起始日期码。0(星期一)到6(星期日)。
8、calendar.timegm(tupletime) 和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍
(1970纪元后经过的浮点秒数)。
9、calendar.weekday(year,mouth,day) 返回星期码,0表示星期1