time模块
时间的三种格式:
- 时间戳: time.time()
- 格式化的时间字符串: time.strftime("格式化字符串", struct_time)
- 元组(struct_time)共九个元素
import time
# 1.时间戳:用于时间间隔的计算 time1-time2
# 时间戳表示的是从1970年1月1日00:00:00开始按秒计算,类型是float
print(time.time(),type(time.time())) # 1598339534.8193207 <class 'float'>
#
# # 2.格式化当前时间
print(time.strftime("%Y-%m-%d %X"))
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 3、结构化时间:用于单独获取时间的某一部分
# localtime() 时间戳转化为 元组(struct_time)
res = time.localtime(time.time()) # #本地时区的struct_time
print(res,"\n",type(res))
print(res.tm_year) # 获取年份
print(res.tm_mday) # 获取当前月份的那一天
print(res.tm_wday)
# gmtime()
res1 = time.gmtime() # UTC时区的struct_time
print(res1)
print(res1.tm_hour)
print(res1.tm_wday)
python中时间日期格式化符号:
- %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 当前时区的名称
- %% %号本身
struct_time元组
image.png其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系
image.png#--------------------------按照上图-----------------------
# localtime([secs])
# 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
time.localtime()
time.localtime(1473525444.037215)
# gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
# mktime(t) : 将一个struct_time转化为时间戳。
print(time.mktime(time.localtime())) #1598342352.0
# strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
# time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
# 元素越界,ValueError的错误将会被抛出。
print(time.strftime("%Y-%m-%d %X", time.localtime())) #2020-08-25 15:59:48
# time.strptime(string[, format])
# 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
print(time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X'))
#time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
#在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
需要真正掌握 时间戳-->格式化字符串互相掌握
案例:“2020-08-25 16:13:24” 5天之后的时间,用代码实现
案例:“2020-08-25 16:13:24” 5天之后的时间,用代码实现
"""
"2020-08-25 16:13:24" 是一个字符串格式化时间,不是datetime.date.time.now() 类型。
所以需要将字符串---struct_time---时间戳 计算5天后的时间戳---struct_time---字符串
"""
import time
tuple_time = time.strptime("2020-08-25 16:13:24", "%Y-%m-%d %H:%M:%S")
t = time.mktime(tuple_time)+3600*24*5
tuple_time = time.localtime(t)
str_t = time.strftime("%Y-%m-%d %H:%M:%S", tuple_time)
print(str_t) # 2020-08-30 16:13:24
程序等待
time.sleep(5) 做web自动化或者网络爬虫的时候用的多
1 #--------------------------按图转换时间---------------------------------
2 # asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
3 # 如果没有参数,将会将time.localtime()作为参数传入。
4 print(time.asctime())#Sun Sep 11 00:43:43 2016
5
6 # ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
7 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
8 print(time.ctime()) # Sun Sep 11 00:46:38 2016
9 print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016
datetime模块
datetime模块定义了下面这几个类:
- datetime.date:表示日期的类。常用的属性有year, month, day;
- datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
- datetime.datetime:表示日期时间。
- datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
- datetime.tzinfo:与时区有关的相关信息
time和datetime转换图形理解如下:
image.pngt = datetime.datetime.now() # 返回当前的datetime日期类型
print(t,type(t)) #2020-08-25 16:13:24.072190 <class 'datetime.datetime'>
print(t.timestamp()) # 打印当前时间戳 1598343346.062311
print(t.date()) # 2020-08-25
print(t.today()) # 打印当前时间 2020-08-25 16:17:38.537745
print(t.month) # 月 8
print(t.day) # 天 25
print(t.year) # 年份 2020
print(t.timetuple()) # time.struct_time(tm_year=2020, tm_mon=8, tm_mday=25, tm_hour=16, tm_min=22, tm_sec=7, tm_wday=1, tm_yday=238, tm_isdst=-1)
print(t.timetuple().tm_year) # 2020
# 把一个时间戳 转为datetime日期类型
# res = datetime.date.fromtimestamp(t.timestamp())
res = datetime.date.fromtimestamp(1499999999)
print(res) # 2017-07-14
# 时间+ -
t = datetime.datetime.now()
print(datetime.datetime.now()) # 2020-08-25 16:32:04.332265
print(t+datetime.timedelta(days=3)) # 当前时间+3天 2020-08-28 16:35:24.725727
print(t+datetime.timedelta(days=-3)) # 当前时间 - 3天 2020-08-22 16:51:53.138261
print(t+datetime.timedelta(weeks=1)) # 当前时间+一周 2020-09-01 16:37:06.759563
# 格式化
d = datetime.datetime.strftime(t+datetime.timedelta(minutes=30), "%Y%m%d%H%S%S") #20200825173232
d1 = datetime.datetime.strftime(datetime.datetime.now(), "%Y%m%d%H%S%S") # 20200825162121
print(d1)
# 时间替换
t1 = t.replace(year=2021,month=9) #2021-09-25 16:42:51.233265
print(t1)
网友评论