python学习笔记 day19 常用模块(二)

time模块

表示时间有三种表示方式:

  时间戳-----time.time();

 格式化的字符串形式 ------time.strftime();

 结构化的元组----time.localtime()

time.time(): 时间戳,主要是给计算机看的,从1970年算起到现在过了多少秒;

import time
print(time.time())

 

运行结果:

time.strftime()  :格式化的字符串,主要是给人看的

import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))    # 按照 %Y-%m-%d %H:%M:%S 这种年月日,时分秒的格式来输出

 

运行结果:

 

 time.localtime(): 结构化的元组,返回的结果有点类似于命名元组(namedtuple)可以通过属性取对应的值

import time
struct_time=time.localtime()
print(struct_time)
print(struct_time.tm_year)
print(struct_time.tm_mon)

运行结果:

 

 time.time()【时间戳】 time.localtime()【结构化元组】 time.strftime()【格式化字符串】之间的转换:

 

 1. time.time()-----> time.localtime()

#时间戳 ---->结构化元组 localtime() 或者gmtime()
import time
t=time.time()   # 时间戳
print(t)  # 1536848749.2373986
print(time.localtime(t))  # 使用time.localtime()转换为结构化元组struct_time
print(time.gmtime(1600000000))

 

运行结果:

 

2. time.localtime()--->time.time()  

#结构化元组--->时间戳 使用mktime()
import time
print(time.localtime())   # 不传参数就是当前的struct_time
print(time.mktime(time.localtime()))  # 由当前的struct_time 转化为当前的时间戳
print(time.localtime(1600000000))   #这个时间戳对应的时间其实是2020-9-13
print(time.mktime(time.localtime(1600000000)))  

 

运行结果:

 

 3. time.localtime()---->time.strftime()  

# 结构化元组----> 格式字符串
import time
struct_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1600000000))   # 时间戳是1600000000先转化为time.localtime() 然后使用strftime()转为格式化字符串
print(struct_time)  # 时间戳为1600000000对应的格式化字符串时间(格式按照strftime 第一个参数指定的格式转化,第二个参数就是localtime()的时间)

运行结果:

4. strftime()---->localtime()

# 格式化字符串-----> 结构化元组
import time
struct_time=time.strptime('1996-04-12','%Y-%m-%d')  # 讲1996-04-12 这个格式化字符串 使用strptime()转为localtime()结构化元组(告诉计算机 1996-04-12 分别对应%Y-%m-%d)
print(struct_time)

 

运行结果:

 

 5. time. localtime() ----->%a%b%d%H%M%S%Y串  使用csatime()

import time
print(time.asctime(time.localtime(1600000000)))  # 时间戳是1600000000对应的localtime(struct_time) 转化为 相应的串
print(time.asctime(time.localtime()))   # 当前的localtime 结构化时间struct_time

 

运行结果:

 

6. time.time()---------%a%b%d%H%M%S%Y串 使用 ctime()

import time
print(time.ctime(time.time()))  # time.time()表示当前的时间戳 对应转为相应格式的串
print(time.ctime(1600000000))   # 1600000000 这个制定的时间戳表示2020-9-13 

 

运行结果:

 

7. 如果有两个时间 计算中间差了多少时间(年月日时分秒格式给出)

import time
struct_time1=time.strptime('2018-09-14 09:39:00','%Y-%m-%d %H:%M:%S')   # 把格式化的时间2018-09-14 09:39:00 使用strptime()先转化为localtime()的结构化时间
struct_time2=time.strptime('2019-08-12 16:23:12','%Y-%m-%d %H:%M:%S')
time1=time.mktime(struct_time1)  # 把结构化元组 struct_time 使用mktime()转为时间戳 这样才可以进行加减
time2=time.mktime(struct_time2)
time_3=time2-time1  # time 仍然是时间戳,需要转为格式化的字符串形式---> 首先时间戳转为结构化元组,再由结构化元组转为格式化的字符串
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time_3)))
print(time_3)

 

运行结果:

这显然不是我想要的结果,把两者的格式化时间先转为结构化元组,然后转为时间戳,相减,可是我再把两者差的时间戳转换回去时,转换的格式化时间都是1970开始的,,,sad.jpg

直到我看了Eva-J的写法,我简直蠢如猪,计算两者时间戳的差之后,先转为结构化元组,然后我一直试图改变属性.tm_year的值,发现改变不了,所以你就不能字符串格式化输出的时候减一下的嘛,我简直是个魔鬼

版本二(Eva-J)

import time
struct_time1=time.strptime('2018-09-14 09:39:00','%Y-%m-%d %H:%M:%S')   # 把格式化的时间2018-09-14 09:39:00 使用strptime()先转化为localtime()的结构化时间
struct_time2=time.strptime('2019-08-12 16:23:12','%Y-%m-%d %H:%M:%S')
time1=time.mktime(struct_time1)  # 把结构化元组 struct_time 使用mktime()转为时间戳 这样才可以进行加减
time2=time.mktime(struct_time2)
time_3=time2-time1  # time 仍然是时间戳,需要转为格式化的字符串形式---> 首先时间戳转为结构化元组,再由结构化元组转为格式化的字符串
# print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time_3)))
print(time_3)

运行结果:

 

posted @ 2018-09-13 22:47  写的BUG代码少  阅读(226)  评论(0编辑  收藏  举报