time模块

在平常的代码中,我们常常需要与时间打交道。在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍。

我们写程序时对时间的处理可以归为以下3种:时间的显示,在屏幕显示、记录日志等"2022-03-04"

时间的转换,比如把字符串格式的日期转成Python中的日期类型时间的运算,计算两个日期间的差值等

在Python中,通常有这几种方式来表示时间:

  1. 时间戳(timestamp), 表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。例子:1554864776.161901
  2. 格式化的时间字符串,比如“2020-10-03 17:54”
  3. 元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同,
  4. mac上:time.struct_time(tm_year=2020, tm_mon=4, tm_mday=10, tm_hour=2,tm_min=53, tm_sec=15, tm_wday=2, tm_yday=100, tm_isdst=0)
索引(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 - 61
6 tm_wday(weekday) 0 - 6(0表示周一)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1

UTC时间

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8,又称东8区。DST(Daylight Saving Time)即夏令时。

time模块的常用方法

time.sleep(secs) :线程推迟指定的时间运行,单位为秒。

import time
# time.sleep(secs) 可以暂停一段时间(秒)
print("你好啊")
time.sleep(3) #程序等待3秒
print("你也好啊")

可以控制程序执行的频率

while True:
print("爬虫程序正在抓取百度信息")
time.sleep(3)

甚至可以用随机数进行替换

import time
import random # 生成一个1-5秒的随机延迟
delay = random.uniform(1, 5) # 暂停相应的随机时间
time.sleep(delay)

time.time() :获取当前时间的时间戳。(数字类型的时间)

time.time() 它返回当前时间的时间戳。时间戳是自1970年1月1日00:00:00(UTC)以来的秒数,不包括闰秒。

这个函数通常用于获取代码运行时的时间,可以用于性能测试、时间戳日志等。返回的时间戳是一个浮点数,表示秒数,同时也可以表示毫秒、微秒等。

下面是一个简单的例子:

import time
print(time.time()) #运行结果 2023-12-05 17:36:44.449821
1701769004.449821

1701769004.449821 这个数字是一个十进制数,表示的是从1970年1月1日00:00:00 UTC到现在的秒数,以及微秒数。其中,小数点后面的部分(449821)表示的是微秒数

使用time计算时间差运算(单位秒)

import time
start = time.time()
for i in range(1000):
a=i
end = time.time()
print(end-start) #计算循环运算耗费了多少时间 994
995
996
997
998
999
0.006974002838134766

Datetime模块

相比于time模块,datetime模块的接口则更直观、更容易调用

datetime模块定义了下面这几个类:

  • datetime.date:表示日期的类。常用的属性有year, month, day;
  • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
  • datetime.datetime:表示日期时间。
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
  • datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)

我们需要记住的方法仅以下几个:

1.获取当前的datetime时间和日期

datetime.datetime.now()

可以配合调用.timestamp().today().year.timetuple().time()等方法

import datetime

print(datetime.datetime.now())       # 打印当前日期
print(datetime.datetime(2013, 12, 5, 17, 58, 43)) # 打印指定日期2013-11-05 17:58:43
print(datetime.datetime.now().timestamp()) # 打印时间戳
print(datetime.datetime.now().today()) # 打印现在时间
print(datetime.datetime.now().year) # 打印现在年
print(datetime.datetime.now().timetuple()) # 转化为time.struct_time()的9个元素的时间元组
print(datetime.datetime.now().time()) # 只显示现在时间,没有日期 #运行结果
2023-12-05 17:58:54.203664
2013-11-05 17:58:43
1701770334.203664
2023-12-05 17:58:54.203664
2023
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=5, tm_hour=17, tm_min=58, tm_sec=54, tm_wday=1, tm_yday=339, tm_isdst=-1)
17:58:54.203664

datetime.date

print(datetime.date.today())    # 只显示今天日期,没有时间
print(datetime.date(1990-12-12)) # 指定一个时间 #运行结果
2023-12-05
1990-12-12

2.把一个时间戳转为datetime日期类型datetime.date.fromtimestamp(1701770334.203664)

import datetime
print(datetime.datetime.fromtimestamp(1701770334.203664))
print(datetime.date.fromtimestamp(1701770334.203664)) #运行结果
2023-12-05 17:58:54.203664
2023-12-05

3. 时间运算datetime.timedelta() 

print(datetime.datetime.now())
print(datetime.datetime.now() + datetime.timedelta(-4)) # 默认参数是天,当前时间 -4天
print(datetime.datetime.now() + datetime.timedelta(days=5, hours=3, minutes=30)) # 详细设置参数,当前时间+5天,3小时,30分钟 #运行结果
2023-12-09 17:37:11.701322
2023-12-05 17:37:11.701322 #当前时间 -4天
2023-12-14 21:07:11.701322 #当前时间 +5天,3小时,30分

单位换算.total_seconds()

import datetime
t1 = datetime.datetime(2018, 1, 2, 12, 30, 0)
t2 = datetime.datetime.today()
diff = t2 - t1
print(diff)
print(diff.total_seconds()) #换算成秒
#运行结果
2167 days, 4:34:55.250549
187245295.250549

4. 时间替换.replace()

print(datetime.datetime.now().replace(year=2999,month=11,day=30))
2999-11-30 15:12:17.046692

5.格式化一个时间.strftime()

strftime => str + f(format) + time   字符串+格式化+时间

使用标准的系统时间,默认的格式是:2023-12-09 17:59:45.835316

t = datetime.datetime.now()
print(t) #运行结果
2023-12-09 17:59:45.835316

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 当前时区的名称
%% %号本身

利用表中的对应关系,我们把标准的时间(2023-12-09 17:59:45.835316)改造成我们需要的时间格式(2023年12月09日 17小时59分钟45秒)

t = datetime.datetime.now()
print(t)
print(t.strftime("%Y年%m月%d日 %H小时%M分钟%S秒")) #运行结果
2023-12-09 17:59:45.835316
2023年12月09日 17小时59分钟45秒

6.计算时间差

手动输入时间,把字符串以特定格式转换成时间.strptime => str + p(parse) + time   字符串+转化+时间

import datetime
s1 = input("请输入第一个时间(yyyy-mm-dd HH:MM:SS):")
s2 = input("请输入第二个时间(yyyy-mm-dd HH:MM:SS):") # 把字符串转化成时间
t1 = datetime.datetime.strptime(s1, "%Y-%m-%d %H:%M:%S")
t2 = datetime.datetime.strptime(s2, "%Y-%m-%d %H:%M:%S")
print(t2 - t1) #运行结果
请输入第一个时间(yyyy-mm-dd HH:MM:SS):2022-12-1 1:1:1
请输入第二个时间(yyyy-mm-dd HH:MM:SS):2023-12-1 2:2:1
365 days, 1:01:00

这里需要感受一下,形参和实参的对应关系。

总结:

time必要掌握的内容

time.sleep(secs)    #让程序休眠多少秒
time.time() #获取当时的时间戳

datetime必要掌握的内容

datetime.datetime.now()    #系统时间
datetime.datetime(2013, 12, 5, 17, 58, 30) #自定义指定一个时间
.strftime("%Y年%m月%d日 %H小时%M分钟%S秒")) #格式化一个时间
.strptime(str, "%Y-%m-%d %H:%M:%S") #把字符串转化为时间
date.today() #获取今天的时间

time模块扩展阅读:

由于time模块复杂以及难以调用,time后面大多的功能都被datetime模块替代,仅提供大家了解


time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。如果 secs 参数省略,则默认使用当前时间。它返回的是一个时间元组(time.struct_time),包含年、月、日、小时、分钟、秒等信息。

import time
print(time.localtime()) #运行结果
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=5, tm_hour=17, tm_min=33, tm_sec=6, tm_wday=1, tm_yday=339, tm_isdst=0)

time.gmtime([secs]):和time.localtime()方法类似,time.gmtime([secs])函数将给定的时间戳转换为UTC时间(即协调世界时)。如果 secs 参数省略,则默认使用当前时间。它返回的是一个时间元组(time.struct_time),包含年、月、日、小时、分钟、秒等信息。

import time
print(time.gmtime()) #运行结果
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=5, tm_hour=9, tm_min=35, tm_sec=55, tm_wday=1, tm_yday=339, tm_isdst=0)

time.mktime(t) :将一个struct_time转化为时间戳。time.mktime() 函数接受一个时间元组作为参数,但时间元组的各个字段应该是按照顺序排列的,而不能使用关键字参数。

import time
print(time.mktime(time.localtime())) #把当前时间,以时间戳的方式输出
print(time.mktime((2023, 12, 5, 11, 1, 8, 5, 343, 0))) #把指定时间,以时间戳的方式输出 #运行结果
1701768786.0
1701745268.0

在这个例子中,我按照 (tm_year=2023, tm_mon=12, tm_mday=5, tm_hour=11, tm_min=1, tm_sec=55, tm_wday=1, tm_yday=339, tm_isdst=0) 的顺序提供了时间元组的各个字段。请注意,tm_wday(星期几)和 tm_yday(一年中的第几天)这两个字段是自动计算的,所以你无需手动提供它们的值。


time.strftime(format[, t]) :把一个代表时间的元组或者struct_time“如由time.localtime()和time.gmtime()返回”转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

import time
print(time.strftime("%Y-%m-%d %X", time.localtime())) #运行结果
2023-12-05 17:45:31

time.strptime(string[, format]) :把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

import time
time.strptime("2023-12-5 17:54","%Y-%m-%d %H:%M") #运行结果
time.struct_time(tm_year=2023, tm_mon=12, tm_mday=5, tm_hour=17, tm_min=54, tm_sec=0, tm_wday=1, tm_yday=339, tm_isdst=-1)

time时间戳和时间关系转换图

字符串转时间格式对应表非常复杂,十分不好记录,因此time模块基本上被datetime取代了

Python——第五章:time模块、datetime模块的更多相关文章

  1. Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  2. 简学Python第五章__模块介绍,常用内置模块

    Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群  群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...

  3. Python第十一章-常用的核心模块04-datetime模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  4. Python模块01/自定义模块/time模块/datetime模块/random模块

    Python模块01/自定义模块/time模块/datetime模块/random模块 内容大纲 1.自定义模块 2.time模块 3.datetime模块 4.random模块 1.自定义模块 1. ...

  5. Python开发【第五章】:常用模块

    一.模块介绍: 1.模块定义 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质上就是.py结尾python文件 分类:内置模块.开源模块.自定义模块 2.导入模块 本质:导 ...

  6. python五十四课——datetime模块

    3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...

  7. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  8. Python第十一章-常用的核心模块01-collections模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  9. Python第十一章-常用的核心模块03-json模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  10. python模块 | 时间处理模块—datetime模块

    在python中,与时间处理相关的模块有 time,datetime,calendar. 时间的两个概念: UTC(世界协调时): 整个地球分为二十四时区,每个时区都有自己的本地时间.格林威治天文时间 ...

随机推荐

  1. DHorse v1.4.0 发布,基于 k8s 的发布平台

    版本说明 新增特性 提供Fabric8客户端操作k8s(预览)的功能,可以通过指定-Dkubernetes-client=fabric8参数开启: Vue.React应用增加Pnpm.Yarn的构建方 ...

  2. PAI-DSW常见问题

    PAI-DSW常见问题 更新时间:2023年6月5日 18:40:00 本文为您介绍PAI-DSW的相关问题. 什么是PAI-DSW? PAI-DSW实例如何挂载和使用自己的NAS文件系统? 如何在P ...

  3. CSS 多行文本超链接下划线动效

    先看效果 乍一看,是不是感觉很简单,仔细一瞅发现事情好像没有那么简单. 如果十分钟还没想出怎么实现,那就把简历上的"精通css"改成"了解css"-- 大部分人 ...

  4. 17. 从零开始编写一个类nginx工具, Rust中一些功能的实现

    wmproxy wmproxy将用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,后续将实现websocket代理, 内外网穿透等, 会将实现过程分享出来, 感 ...

  5. ELK7.x环境部署

    1.Elasticsearch (ES)配置: 部署配置ES,需要配置JDK环境,JDK是Java语言的软件开发工具包: 下载JAVA jdk源码包: wget https://mirrors.yan ...

  6. z函数|exkmp|拓展kmp 笔记+图解

    题外话,我找个什么时间把kmp也加一下图解 z函数|exkmp 别担心 这个exkmp和kmp没毛点关系,请放心食用. 本文下标以1开始,为什么?因为1开始就不需要进行长度和下标的转换,长度即下标. ...

  7. Golang 面向对象深入理解

    1 封装 Java 中封装是基于类(Class),Golang 中封装是基于结构体(struct) Golang 的开发中经常直接将成员变量设置为大写使用,当然这样使用并不符合面向对象封装的思想. G ...

  8. k8s-服务网格实战-入门Istio

    背景 终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配置 Co ...

  9. 慎用:git reset --hard

    丧心病狂的命令:git reset --hard commit ,我以后没弄懂这个命令之前,再也不碰它了,背后凉嗖嗖的,谁敢啊. 事情的原由是我本地git commit 的时候,发现文件多了,想删掉本 ...

  10. Filter入门实例

    一.介绍 Filter:Filter是Servlet的"加强版",它主要用于对用户请求进行预处理,也可对HttpServletResponse进行后处理,是个典型的"处理 ...