【 一 】时间模块(time/datetime)
【 二 】 表示时间的三种方式
-
*时间戳(Timestamp)是指1970年1月1日00:00:00开始计算的偏移量。可以使用time模块中的time()函数获取当前时间的时间戳,也可以使用datetime模块中的timestamp()方法将日期时间对象换转为时间戳。**
import time import datetime #获取当前时间的时间戳 time = time.localtime() print('当前的时间元组为: ',time) ## 将日期时间对象转换为时间戳 dt = datetime.datetime(2023,12,17,14,46,0) time2 = dt.time() print('时间元组为',time2) #当前的时间元组为: time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=14, tm_min=46, tm_sec=27, tm_wday=6, tm_yday=351, tm_isdst=0) # 时间元组为 14:46:00
-
时间元组(Tuple) : 是指包含了年、月、日、时、分、秒、周几、一年中第几天等信息的元组。可以使用time模块中的struct_time类来表示时间元组,也可以使用datetime模块中的timetuple()方法将日期对象转换为时间元组。
#获取当前时间元组 timetuple1 = time.localtime() print('当前时间元组为: ',timetuple1) #将日期时间对象转换为时间元组 dt = datetime.datetime(2023,12,17,14,59) timetuple2 = dt.timetuple() print("2023年12月17日14:59:00时间元组为: ",timetuple2) # 当前时间元组为: time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=15, tm_min=0, tm_sec=53, tm_wday=6, tm_yday=351, tm_isdst=0) # 2023年12月17日14:59:00时间元组为: time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=14, tm_min=59, tm_sec=0, tm_wday=6, tm_yday=351, tm_isdst=-1)
-
日期时间对象(Datetime):指包含了年、月、时、分、秒等信息对象。可以使用datetime模块中的datetime类来表示日期时间对象,也可以使用time模块中的getime()、localtime()方法将时间戳转换为日期时间对象。
# 获取当前时间的日期时间对象 dt = datetime.datetime.now() print("当前日期时间为:",dt) # 将时间戳转换为日期时间对象 timmstamp = time.time() dt2 = datetime.datetime.fromtimestamp(timmstamp) print('时间戳',timmstamp,'对应的日期时间为:',dt2) # 当前日期时间为: 2023-12-17 15:07:46.678838 # 时间戳 1702796866.6788387 对应的日期时间为: 2023-12-17 15:07:46.678839
【 三 】time
1.time
这样就可以实现一个查看当前时间戳
import time print(time.time()) #1702797281.6670616
2.localtime:查看当前时间的时间(以元组的形式)
如果我们不加参数,默认是当前时间的时间戳作为参数
传入的参数是时间戳。默认是当前时间的时间戳
import time time.localtime()#当前时间 #time.localtime(1702797982.5156393)#指定时间戳 time_tuple = time.struct_time((2023, 12, 17, 15, 21, 1, 5, 351, 0)) print(time_tuple) #time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=15, tm_min=21, tm_sec=1, tm_wday=5, tm_yday=351, tm_isdst=0)
下图是每个参数的含义解释:
3、gmtime:返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间
传入的参数必须是时间戳。默认是当前时间的时间戳
import time #默认当前时间戳 第一种 time_tuple1 = time.gmtime() print(time_tuple1) #time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=7, tm_min=38, tm_sec=40, tm_wday=6, tm_yday=351, tm_isdst=0) 第二种 timestamp = time.time() # 获取当前时间戳 time_tuple2 = time.gmtime(timestamp) print(time_tuple2) #time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=7, tm_min=39, tm_sec=6, tm_wday=6, tm_yday=351, tm_isdst=0)
4、asctime:返回字符串形式的时间,可以传入struct_time形式时间,用来做转化
传入的参数是时间元组形式;结果是字符串形式
(1)默认情况使用:
print(time.asctime()) #Sun Dec 17 15:40:35 2023
(2)通过time.localtime()得到一个时间元组形式:
date = time.localtime(1600200200) print(date) #time.struct_time(tm_year=2020, tm_mon=9, tm_mday=16, tm_hour=4, tm_min=3, tm_sec=20, tm_wday=2, tm_yday=260, tm_isdst=0) print(time.asctime(date)) #Wed Sep 16 04:03:20 2020
(3)传入当地时间的时间戳形式:
print(time.asctime(time.localtime())) # Sun Dec 17 15:44:32 2023
(4)通过time.time()得到时间戳,再将结果传给time.localtime(),得到时间元组,最后将元组再传给time.asctime():
print(time.asctime(time.localtime(time.time()))) # Sun Dec 17 15:45:26 2023
5、ctime:返回字符串形式的时间,可以传入时间戳格式时间,用来做转化
传入的参数是时间戳,结果是字符串形式
(1)默认情况
print(time.ctime()) # Sun Dec 17 15:46:39 2023
(2)指定某个时间戳
print(time.time()) print(time.ctime(1702799240.7366652)) # 1702799258.9206767 # Sun Dec 17 15:47:20 2023
(3)传入中间结果的时间戳
time.time()得到的是当前时间的时间戳
print(time.ctime(time.time())) # Sun Dec 17 15:48:37 2023
6、mktime:时间元组转成时间戳形式,必须带上时间元组作为参数
传入参数是时间元组形式,返回的结果是时间戳
print(time.mktime()) # Traceback (most recent call last): # File "C:\Users\小白\PycharmProjects\pythonProject2\3\时间模块.py", line 88, in <module> # print(time.mktime()) # ^^^^^^^^^^^^^ # TypeError: time.mktime() takes exactly one argument (0 given) 因为缺少参数()里面必须要传入一个参数
(1)通过time.localtime()得到时间元组,传给time.mktime
date1 = time.localtime() print(date1) print(time.mktime(date1)) #time.struct_time(tm_year=2023, tm_mon=12, tm_mday=17, tm_hour=16, tm_min=13, tm_sec=52, tm_wday=6, tm_yday=351, tm_isdst=0) # 1702800832.0
(2)传入其他事件元组的结果作为参数
print(time.mktime(time.gmtime())) # 1702772817.0
7、strftime:把一个时间元组格式化为时间字符串。如果未指定,默认将传入time.localtime()。如果元组中任何一个元素越界,将会报错。
传入参数是元组格式的时间,返回结果是时间字符串
(1)默认输出的都是当前时间
data = time.strftime('%y-%m,-%d') print(data)#23-12,-17 print(time.strftime('%y/%m,/%d')) print(time.strftime('%y/%m,/%d %H:%M:%S')) print(time.strftime('%y/%B,/%d %I:%M:%S %p')) # 23-12,-17 # 23/12,/17 # 23/12,/17 16:59:27 # 23/December,/17 04:59:27 PM
(2)指定某个时间元组
在指定格式的同时,我们还可以传入一个时间元组:
print(time.strftime("%y/%m/%d %H:%M:%S",time.localtime(1702799240.7366652))) # 23/12/17 15:47:20
下表格是常用的时间格式和含义:
格式 | 含义 | 取值范围(样式) |
---|---|---|
%y | 去掉世纪的年份 | 00-99,如“19” |
%Y | 完整的年份 | 如2019 |
%j | 指定日期是一年中的第几天 | 范围001-366 |
%m | 返回的是月份 | 范围:01-12 |
%b | 本地简化月份的名称 | 简写的英文月份 |
%B | 本地完整月份的名称 | 完整的英文月份 |
%d | 该月的第几日 | 如,5月1日返回的是“01” |
%H | 第几小时,24小时制 | 00-23 |
%l | 第几小时,12小时制 | 00-12 |
%M | 分钟 | 00-59 |
%S | 秒 | 00-59 |
%U | 该年中的第几个星期(周日为一周的起点) | 00-53 |
%W | 同上,周一为起点 | 00-53 |
%w | 一个星期中的第几天 | 0-6 |
%Z | 时区 | 在大陆测试返回的是CST |
%x | 日期 | 日/月/年 |
%X | 时间 | 时:分:秒 |
%c | 详细日期时间 | 日/月/年时:分:秒 |
%% | %字符 | '%'字符 |
%p | 上下午 | AM or PM |
8、strptime:将字符串形式的时间转成时间元组;和strftime相反功能
两个参数:第一个是字符串形式的时间数据,第二个是我们指定的格式
import time time_str = '23/12/17 17:06:17' time_format = '%y/%m/%d %H:%M:%S' # 将时间字符串解析为时间元组 time_tuple = time.strptime(time_str, time_format) # 将时间元组格式化为指定格式的字符串 formatted_time = time.strftime(time_format, time_tuple) #23/12/17 17:06:17
8大方法总结
time模块的8大方法的输入和输出总结:
方法 | 输入 | 输出 |
---|---|---|
time | 无 | 时间戳 |
localtime | 时间戳 | 时间元组 |
gmtime | 时间戳 | 时间元组 |
asctime | 时间元组 | 字符串 |
ctime | 时间戳 | 字符串 |
mktime | 时间元组 | 时间戳 |
strftime | 格式、时间元组(可选) | 字符串 |
strptime | 字符串、格式 | 时间元组 |