一. time
1.时间分为三种格式的表示方法。
import time
# 1. 时间戳(timestamp): 从1970年1月1日00:00:00到现在经过的秒数。主要用于时间间隔的计算, 返回的是float类型。
res = time.time()
print(res)
print(type(res)) # <class 'float'>
# 2. 格式化的字符串时间(format string): 主要用于展示时间。例如: '2020-03-30 11:11:11'
"""
%Y-%m-%d %H:%M:%S: 对应的是年,月,日,时,分,秒.(%X等同于%H:%M:%S的表现形式. )
%p: 对应的是上午am
"""
print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %X %p'))
# 3. 结构化的时间(struct_time): 获取当前时间的某一部分。
"""
struct_time元组共有9个元素共九个元素: (年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
结构化的时间格式分为两种: 一种是世界时间,一种是本地时间。两者之间唯一不同的就是小时。
"""
# 本地时区的struct_time
res = time.localtime()
print(res) # time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=16, tm_min=13, tm_sec=23, tm_wday=0, tm_yday=90, tm_isdst=0)
print(res.tm_mday) # 30
print(res.tm_wday) # 0
print(res.tm_yday) # 90
# 世界时间UTC时区的struct_time(了解)
res = time.gmtime()
print(res) # # time.struct_time(tm_year=2020, tm_mon=3, tm_mday=30, tm_hour=8, tm_min=13, tm_sec=23, tm_wday=0, tm_yday=90, tm_isdst=0)
2.格式化字符串的时间格式中字符对应关系
%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 当前时区的名称 # 乱码
%% %号本身
3.三种时间格式之间的转换(掌握)
import time
"""
时间格式的转换是基于结构化的时间为基础的。结构化的时间相当于是中间的中转站。
"""
# 一. 结构化的时间与时间戳之间的进行的转换。
# 1. struct_time -- > time_stamp
print(time.mktime(time.localtime()))
# 2. time_stamp -- > struct_time
print(time.localtime(time.time()))
print(time.gmtime(time.time()))
# 二. 结构化的时间与格式化字符串时间之间进行的转换。
# 1. struct_time --> format_string
print(time.strftime('%Y-%m-%d %X'))
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 等同于上面
print(time.strftime('%Y-%m-%d %X', time.localtime())) # 第二个参数默认就是time.localtime加与不加都一样。
# 2. format_string ---> struct_time
print(time.strptime('2020-03-03 11:11:11', '%Y-%m-%d %H:%M:%S'))
# 三. 真正掌握的只需要有一条: 格式化的字符串时间到时间戳之间的转换。
# 需求: 把格式化字符串的时间转化成时间戳的时间, 再进行时间的运算。
res = "1988-03-03 11:11:11"
struct_time = time.strptime(res, '%Y-%m-%d %X')
timestamp = time.mktime(struct_time)
res = timestamp + 7 * 24 * 3600 # 以当前时间戳为准, 计算七天以后的时间。
print(res) # 573966671.0
# 需求: 把进行加减运算过后的时间戳的时间转换成格式化的字符串时间。
res = time.strftime('%Y-%m-%d %X', time.localtime(res))
print(res) # 1988-03-10 11:11:11
4.time.sleep
"""
一般做爬虫的时候需要有用。这个时候不是效率越来越高越好,效率越来越高,把别人的网站会干死。还有就是破解账号与密码的时候如果你是机器输入账号密码非常快。这么快,所以要time.sleep模仿人正常输入密码的那种事情,因为它会监测任正快速密码,还有一定的时间间隔,不可能一下就完成。
"""
import time
time.sleep(3)
5.另外一种:结构化时间与时间戳转换成格式化字符串时间形式(了解)
"""
%a 本地简化星期名称
%b 本地简化的月份名称
%d 月内中的一天(0-31)
"""
# 1. asctime([t]): 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。
"""
在Linux操作系统上,这种时间的格式比较常见,它等同于time.strftime('%b %a %d %X %Y')
"""
print(time.asctime()) # Mon Mar 30 20:48:21 2020
print(time.asctime(time.localtime())) # 同上
# 2. ctime([secs]): 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数
print(time.ctime()) # Sun Sep 11 00:46:38 2016
print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016
二. datetime
"""
时间加减:
datetime真正的强大之处在于,你可以在他原本的时间结构上参与时间的运算。而time只有时间戳的基础之上才能进行运算, 对于'2020-03-30 11:11:11'类型的格式的显示, 互相转换之间繁琐, 需要从 时间戳 -> 结构化时间 -> 格式化字符串时间.
"""
import datetime
# 1. datetime.now() 统计当前时间
print(datetime.datetime.now()) # 2020-03-30 11:11:11.941925
# 2. timedelta() 主要用来统计时间间隔并与时间进行加减运算。(提示: 没有年份单位上的运算)
print(datetime.datetime.now() +datetime.timedelta(days=3)) # 表示在当前时间加上天。
print(datetime.datetime.now() +datetime.timedelta(days=-3)) # 表示在当前时间减三天
print(datetime.datetime.now() +datetime.timedelta(weeks=1)) # 表示在当前时间加一个礼拜。
# 3. datetime.datetime.fromtimestamp() 将时间戳直接转化成格式化字符串的时间。
print(datetime.datetime.fromtimestamp(time.time())) # 2020-03-30 20:13:36.453206
print(datetime.datetime.fromtimestamp(99999999)) # 1973-03-03 17:46:39
# 4. 本地时间与世界标准时间。
print(datetime.datetime.now()) # 本地时间: 2020-03-30 20:59:28.337211
print(datetime.datetime.utcnow()) # 世界标准时间: 2020-03-30 12:59:28.337211