时间模块
在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:
(1) 时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
(2) 格式化的时间字符串(Format String): ‘1999-12-06’
(3) 元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
三种模块之间可以相互转换
1. time模块
格式化时间符号
%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 当前时区的名称
%% %号本身
时间元组符号
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为0 |
重点
import time
time.sleep() # 原地阻塞指定的秒数
time.sleep() # 获取时间戳时间
# 格式化时间
'常用'
print(time.strftime('%Y-%m-%d')) # 2021-11-25
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2021-11-25 18:34:33
print(time.strftime('%Y-%m-%d %X')) # 2021-11-25 18:34:33
了解
1. 时间戳->结构化时间
print(time.gmtime()) # UTC 时间 相差8小时
print(time.localtime()) # 本地时间
# time.struct_time(tm_year=2021, tm_mon=11, tm_mday=25, tm_hour=10, tm_min=57, tm_sec=36, tm_wday=3, tm_yday=329, tm_isdst=0)
# time.struct_time(tm_year=2021, tm_mon=11, tm_mday=25, tm_hour=18, tm_min=57, tm_sec=36, tm_wday=3, tm_yday=329, tm_isdst=0)
# 时间元组:localtime将一个时间戳转换为当前时区的struct_time
print(time.localtime())
# time.struct_time(tm_year=2021, tm_mon=11, tm_mday=25, tm_hour=18, tm_min=41, tm_sec=47, tm_wday=3, tm_yday=329, tm_isdst=0)
res = time.localtime()
也可以单独拿出值
print(res.tm_year) # 2021
print(res.tm_mon) # 11
2. 结构化时间->时间戳
print(time.mktime((2005, 3, 18, 1, 58, 31, 4, 77, 0))) # 1111082311.0
3. 结构化时间->字符串时间
print(time.strftime("%Y-%m-%d",time.localtime(1500000000))) # 2017-07-14
4. 字符串时间->结构化时间
print(time.strptime("2017-03-16", "%Y-%m-%d"))
# time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=75, tm_isdst=-1)
print(time.strptime("07/24/2017", "%m/%d/%Y"))
# time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=205, tm_isdst=-1)
'小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的'
看看就行了
# 结构化时间-> %a %b %d %H:%M:%S %Y串、
# time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
print(time.asctime(time.localtime(1500000000)))
# Fri Jul 14 10:40:00 2017
print(time.asctime())
# Thu Nov 25 19:08:51 2021
# 时间戳 --> %a %b %d %H:%M:%S %Y串
# time.ctime(时间戳) 如果不传参数,直接返回当前时间的格式化串
print(time.ctime())
# Thu Nov 25 19:09:40 2021
print(time.ctime(1500000000))
# Fri Jul 14 10:40:00 2017'
2. datetime模块
print(datetime.date.today()) # 2021-11-25
print(datetime.datetime.today()) # 2021-11-25 19:14:35.905034
"""date年月日 datetime年月日时分秒 time时分秒(MySQL django可以)"""
res = datetime.datetime.today()
'也可以一个个取'
print(res.year) # 2021
print(res.month) # 11
print(res.weekday()) # 3 获取星期(weekday星期是0-6) 0表示周一
print(res.isoweekday()) # 4 获取星期(weekday星期是1-7) 1表示周一
"""时间差(timedelta)"""
ctime = datetime.datetime.today()
time_del = datetime.timedelta(days = 3)
print(ctime) # 2021-11-25 19:21:50.007239
print(ctime - time_del) # 2021-11-22 19:21:50.007239
print(ctime + time_del) # 2021-11-28 19:21:50.007239
"""
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
# UTC时间与我们的东八区时间差 八个小时
print(datetime.datetime.now()) # 2021-11-25 19:23:15.945830
print(datetime.datetime.utcnow()) # 2021-11-25 11:23:15.945830