python下的⽇期与时间(时间格式转换、时间戳处理,时间差处理)python下的⽇期与时间
⼀、在Python中,时间主要有三种表⽰形式,
1.时间戳(TimeStamp):1970年1⽉1⽇之后的秒
2.时间元组格式化形式 包含了:年、⽇、星期 得到time.struct_time(tm_year=2017, tm_mon=10, tm_mday=14…)
3.可视化的字符串 2017-11-11 11:44
import time
#1 时间戳:1970年1⽉1⽇之后的秒
print('1.时间戳形式:{}'.format(time.time()))
1.时间戳形式:1542765908.295993
时间戳单位最适于做⽇期运算。但是1970年之前的⽇期就⽆法以此表⽰了。太遥远的⽇期也不⾏,UNIX和Windows只⽀持到2038年。
2.时间戳科学的解释
最初计算机操作系统是32位,⽽时间也是⽤32位表⽰。32位能表⽰的最⼤值是2147483647。另外1年365天的总秒数是
31536000,2147483647/31536000 = 68.1,也就是说32位能表⽰的最长时间是68年,⽽实际上到2038年01⽉19⽇03时14分07秒,便会到达最⼤时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12⽉13⽇20时45分52秒,这样便会出现时间回归的现象,很多软件便会运⾏异常了。
到这⾥,我想问题的答案已经出来了:因为⽤32位来表⽰时间的最⼤间隔是68年,⽽最早出现的UNIX操作系统考虑到计算机产⽣的年代和应⽤的时限综合取了1970年1⽉1⽇作为UNIX TIME的纪元时间(开始时间),⾄于时间回归的现象相信随着64为操作系统的产⽣逐渐得到解决,因为⽤64位操作系统可以表⽰到292,277,026,596年12⽉4⽇15时30分08秒,相信我们的N代⼦孙,哪怕地球毁灭那天都不⽤愁不够⽤了,因为这个时间已经是千亿年以后了。
为什么是1970,因为这个设计时候是 70 年代
#2 元组格式化形式包含了:年、⽇、星期得到time.struct_time(tm_year=2017, tm_mon=10, tm_)
print('2.元组格式化形式:{}'.ime()))
2.元组格式化形式:time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=2, tm_min=5, tm_sec=9, tm_wday=2, tm_yday=325, tm_isdst=0)什么是时间元组?
很多Python函数⽤⼀个元组装起来的9组数字处理时间:
序号字段值
04位数年2008
1⽉  1 到 12
2⽇1到31
3⼩时0到23
4分钟0到59
5秒0到61 (60或61 是闰秒)
6⼀周的第⼏⽇0到6 (0是周⼀)
7⼀年的第⼏⽇1到366 (儒略历)
8夏令时-1, 0, 1, -1是决定是否为夏令时的旗帜
也就是struct_time元组。这种结构具有如下属性:
序号属性值
0tm_year2008
1tm_mon  1 到 12
2tm_mday  1 到 31
3tm_hour0 到 23
4tm_min0 到 59
unix时间戳转换日期格式5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周⼀)
7tm_yday  1 到 366(儒略历)
8tm_isdst-1, 0, 1, -1是决定是否为夏令时的旗帜#3 可视化的字符串 2017-11-11 11:44
print('3.可视化的字符串:{}'.format(time.strftime("%Y-%m-%d %H:%M:%S")))
3.可视化的字符串:2018-11-21 10:05:10
python中时间⽇期格式化符号:
%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 当前时区的名称
%% %号本⾝
⼆、三种时间的转化
1.时间戳------->时间元组:
UTC是国际时,UTC+8就是国际时加⼋⼩时,是东⼋区时间,也就是北京时间。
#⽤time.localtime()⽅法,将⼀个时间戳转换为当前时区的struct_time。
time1 = time.time()
tuple1 = time.localtime(time1)# UTC + 8 时间
tuple1
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=10, tm_min=5, tm_sec=11, tm_wday=2, tm_yday=325, tm_isdst=0)
time1 = time.time()
tuple1 = ime(time1)# UTC时间
tuple1
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=2, tm_min=5, tm_sec=11, tm_wday=2, tm_yday=325, tm_isdst=0)
2.时间元组-------->时间戳:
tuple2 = time.localtime()
time2 = time.mktime(tuple2)
time2
1542765912.0
3.时间元组--------->字符串:
-strftime(format[, tuple])
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
tuple3 = time.localtime()
strTime = time.strftime("%Y-%m-%d %H:%M:%S",tuple3)
strTime
‘2018-11-21 10:20:27’
strTime1 = time.strftime("%Y{y}%m{m}%d{d} %H{h}%M{m1}%S{s}",tuple3).format(y="年",m="⽉",d="⽇",h="时",m1="分",s="秒")
strTime1
'2018年11⽉21⽇ 10时05分12秒'
4、asctime()⽅法
time.asctime([t]))
参数
t – 9个元素的元组(time.struct_time)或者通过函数 gmtime() 或 localtime() 返回的时间值。
返回值
返回⼀个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12⽉11⽇ 周⼆18时07分14秒)的24个字符的字符串。
t = time.localtime()
print(type(t),t)
time.asctime(t)
<class 'time.struct_time'> time.struct_time(tm_year=2018, tm_mon=11, tm_mday=21, tm_hour=10, tm_min=5, tm_sec=13, tm_wday=2, tm_yday=325, tm_i sdst=0)
'Wed Nov 21 10:05:13 2018'
5、把时间戳---->time.asctime()
t=time.time()
print(type(t),t)
<class 'float'> 1542765913.8286655
'Wed Nov 21 10:05:13 2018'
三、时间戳计算时间差
#根据时间戳来计算(注意时间戳时秒还是毫秒)
#1、天数
time.time()+86400*7#当前时间的后7天
#2、⼩时
time.time()+3600*7#当前时间的后7⼩时
#3、分钟
time.time()+60*7#当前时间的后7分钟
1542766334.2900052
三、字符串形式计算时间差
#字符串时间差
import datetime
start ="2018-06-19 17:37:31"
end ="2019-07-30 17:37:31"
start=time.strptime(start,"%Y-%m-%d %H:%M:%S")
end=time.strptime(end,"%Y-%m-%d %H:%M:%S")
userStart=datetime.datetime(start[0],start[1],start[2])
userEnd=datetime.datetime(end[0],end[1],end[2])
print((userEnd-userStart).days)# 0 天数
# print (end-start).total_seconds() # 30.029522 精确秒数
# print (end-start).seconds # 30 秒数
# print (end-start).microseconds # 29522 毫秒数
406
<div align="center">
Python不断更新,如果发现有最新⽅法欢迎留⾔交流。同时欢迎加⼊Python资源分享Q:867300100