美文网首页
时间模块:time和datetime

时间模块:time和datetime

作者: 阿登20 | 来源:发表于2020-08-25 17:30 被阅读0次
image.png

time模块

时间的三种格式:

  1. 时间戳: time.time()
  2. 格式化的时间字符串: time.strftime("格式化字符串", struct_time)
  3. 元组(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自动化或者网络爬虫的时候用的多

image.png
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.png
t = 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)

相关文章

网友评论

      本文标题:时间模块:time和datetime

      本文链接:https://www.haomeiwen.com/subject/cmpzjktx.html