目录
time模块
time模块是python的内置模块,无需下载,在使用前导入即可。
time模块一共有3种表示时间的方式。分别是时间戳、字符串时间、结构化时间,这3种都是获取当前的时间,只是输出方式不同而已
时间戳
时间戳,是表示从1970年1月1号0点0分0秒到现在的一个偏移量。一般是一个整数部分有10位的小时。使用模块中的.time()获取。
例子:
import time
print(time.time()) #时间戳
# 输出结构:1647942946.8686996
字符串时间
字符串时间,是可以以字符串的方式返回当前时间,并且返回的格式可以自己控制。使用.strftime()获取。括号内的参数表示返回时间的格式。
常用格式代码:
- %Y 年份,世纪为十进制数。
- %m 以十进制数表示的月份 [01,12]。
- %d 以十进制数表示的日期 [01,31]。
- %H 小时(24 小时制),十进制数 [00,23]。
- %M 分钟为十进制数 [00,59]。
- %S 秒为十进制数 [00,61]。
- %z 与 UTC 的时区偏移。
- %a 区域设置的缩写工作日名称。
- %A 区域设置的完整工作日名称。
- %b 区域设置的缩写月份名称。
- %B 语言环境的完整月份名称。
- %c 区域设置的适当日期和时间表示。
- %I 小时(12 小时制),十进制数 [01,12]。
- %p 区域设置相当于 AM 或 PM。
- %X表示时分秒。格式是小时-分钟-秒
例子:
print(time.strftime('%Y-%m-%d %X'))
# 2022-03-22 20:29:53
print(time.strftime('%Y年%m月%d日%H时%M分%S秒'))
# 2022年03月22日20时29分53秒
使用时注意大小写!
结构化时间
又称时间元组。一种Python的数据结构表示。这个元组有9个整型内容。分别表示不同的时间含义。
含义:
- tm_year表示年
- tm_mon表示月
- tm_mday表示号
- tm_hour表示小时
- tm_min表示分种
- tm_sec表示秒
- tm_wday表示周几(但是是从0开始,比如星期一为0)
- tm_yday表示一年的第几天(从1开始,包括当天)
- tm_isdst表示是否是夏令时(默认为-1,0:表示正常格式,1:表示为夏令时格式,-1:表示根据当前的日期时间格式来判定)
例子:
print(time.localtime())
# time.struct_time(tm_year=2022, tm_mon=3, tm_mday=22, tm_hour=20, tm_min=56, tm_sec=41, tm_wday=1, tm_yday=81, tm_isdst=0)
结构化时间的转换
结构化时间转换成时间戳
需要使用到.mktime(p_tuple)方法,p_tuple表示结构化时间
例子:
a=time.localtime() #获取结构化时间
print(time.mktime(a))#输出结构1647955845.0
结构化时间转换成字符串时间
需要使用到.strftime(format, p_tuple=None)方法,format表示字符串时间的结构,p_tuple表示结构化时间,默认为None,表示当前的字符串时间。
例子
a=time.localtime() #获取结构化时间
print(time.strftime('%Y-%m-%d',a))#2022-03-22
时间戳的转换
时间戳转换成结构化时间
将时间戳数值输入进.localtime()方法或者.gmtime()。localtime()方法可以将时间转换为当地时间。gmtime()方法表示UTC时间,与英国伦敦时间一致。
例子
a = time.time() # 获取当前时间戳
print(time.localtime(a)) # 转换为结构化时间
#输出结果
# time.struct_time(tm_year=2022, tm_mon=3, tm_mday=22, tm_hour=21, tm_min=5, tm_sec=49, tm_wday=1, tm_yday=81, tm_isdst=0)
时间戳转换成字符串时间
时间戳是无法直接转换成字符串时间的,但是结构化时间可以,所以时间戳转换成字符串时间可以先将时间戳转换成结构化时间,再将结构化时间转换成字符串时间
例子
a = time.time() # 获取当前时间戳
print(time.strftime('%Y-%m-%d',time.localtime(a)))
#输出结构为2022-03-22
先传入字符串时间的格式,再输入结构化时间。
字符串时间的转换
字符串时间转换成结构化时间
使用.strptime(string, format)方法。string表示字符串时间,format表示字符串时间的格式,输入的格式必须和字符串时间相同,否则会报错。输入的字符串也不能使用变量表示,也会报错
例子:
print(time.strptime('2022-03-22','%Y-%m-%d'))
#time.struct_time(tm_year=2022, tm_mon=3, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=81, tm_isdst=-1)
字符串时间转换成时间戳
转换成时间戳也不能直接转换,也需要先转换成结构化时间再转换为时间戳
例子
a=time.strptime('2022-03-22','%Y-%m-%d') #将这个字符串时间转换为结构化时间
print(time.mktime(a)) #输出结构为1647878400.0
sleep()
原型为sleep(seconds),表示可以使程序暂停一段时间,seconds表示暂停多久,单位为秒
time.sleep(10) #暂停10秒
如果计算两个时间差
如果需要计算两个时间差的话,只能使用时间戳进行加减,格式化时间和字符串时间是无法进行加减的。将结束时间减去开始时间再减去1970年1月1号0时0分0秒,因为时间戳是表示一个偏移量,使用使用时间戳计算时间差,所以还需要减去时间戳的初值
# 计算时间差
true_time = time.mktime(time.strptime("2019-09-11 08:30:00", "%Y-%m-%d %H:%M:%S"))
# 将开始时间定为2019-09-11 08:30:00并将该时间转换为时间戳
time_now = time.mktime(time.strptime("2019-09-12 11:30:00", "%Y-%m-%d %H:%M:%S"))
# 将结束时间定为2019-09-12 11:30:00并将该时间转换为时间戳
a = time_now - true_time # 获得相差的时间戳
print(a) # 97200.0
struct_time = time.gmtime(a) # 转换成字符串时间方便输出
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)) # 减去初值
# 过去了0年0月1天3小时0分钟0秒
datetime模块
是python处理时间和日期的标准库!也与time一样,直接导入即可,下面暂时只有比较常用的类详情。
datetime类
是datetime模块中比较常用的类别之一。可以获取当前日期时间。
.now()(获取当前时间)
from datetime import datetime # 从datetime模块中导入datetime类
print(datetime.now()) #获取当前时间
#2022-03-24 17:03:18.469311
获取当前时间,格式为字符串时间的。
获取指定日期和时间
可以将指定的数据转换为固定的格式(字符串时间),不填默认为0
from datetime import datetime # 从datetime模块中导入datetime类
print(datetime(2002,11,26)) #2002-11-26 00:00:00
将字符串时间转换为时间戳
使用.timestamp()可以将字符串时间转换为时间戳
from datetime import datetime # 从datetime模块中导入datetime类
now_time = datetime.now() # 获取当前字符串时间
print(now_time) # 2022-03-24 17:12:02.510907
times = now_time.timestamp() # 将字符串时间转换为时间戳赋值给times
print(times) # 1648113122.510907
将时间戳转换为字符串时间
使用.fromtimestamp()方法可以将时间戳转换为字符串时间
import time # 导入time模块
from datetime import datetime # 从datetime模块中导入datetime类
now_time = time.time() # 获取时间戳
print(now_time) # 1648113270.9295025
str_time = datetime.fromtimestamp(now_time) # 转换为字符串时间
print(str_time) # 2022-03-24 17:14:30.929502
将字符串时间转换为datetime类中统一的格式
使用.strptime()方法,注意:与time模块一样,两个格式需要一样才能转换
from datetime import datetime # 从datetime模块中导入datetime类
str_time=datetime.strptime('2002-11-26','%Y-%m-%d')
print(str_time) #2002-11-26 00:00:00
timedelta类
.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) ,这些参数的值默认为0,可根据需要自行更改
- days表示天数
- seconds表示秒数
- microseconds表示微秒数,表示0.000001秒
- milliseconds表示毫秒,表示0.001000秒
- minutes表示分钟
- hours表示小时
- weeks表示星期
可以为数字加上特定的单位,并这些数字可以直接在时间上进行运算,可以快速的得到某某时间后的具体日期时间。
from datetime import timedelta
from datetime import datetime
Start_time = datetime(2022, 3, 24) # 表示开始时间,2022年3月24号
print(Start_time) # 2022-03-24 00:00:00
time = timedelta(days=1, hours=1) # 1天1小时
end_time = Start_time + time # 计算开始时间后的1天1小时
print(end_time) # 2022-03-25 01:00:00