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. zxy 简单 dp 大讲堂

    讲课讲得非常清楚啊,我绝赞膜拜.节奏可以,思路清晰,解法自然,为讲师点赞. 第一个题是 loj3282 / joisc2020 - Treatment Project.原问题由 \(\left(S, ...

  2. vi命令使用详解

    vi命令使用详解 1. 三种工作模式 命令模式:通过命令对文件进行常规操作 打开文件时进入命令模式 (vi的入口) 通过命令对文件进行常规操作,如定位.翻页.复制.粘贴.删除等在图形界面下通过鼠标或快 ...

  3. OPPO主题组件开发 - 调试与预览

    本篇作为 OPPO主题组件调试与预览 文档的补充,因为它真的很简单而且太老,一些命令已发生变化 1. 调试前准备 1. PC 端下载 adb命令工具 下载 https://adbdownload.co ...

  4. 小景的工具使用--Java诊断工具Arthas的使用说明

    小景最近在做程序和数据库的压测工作,期间监控压测数据,分析程序原因变成了一个待解决的问题,根据公司小伙伴的建议,接触了阿尔萨斯这个诊断工具,下面小景分别基于Linux操作系统和Windows操作系统, ...

  5. 安信可开发环境构建-基于Ai-WB2系列 和 Ai-M61 或 Ai-M62 (环境上下文切换)

    首先,对于Ai-WB2系列环境的构建官方文档已经讲的非常明白了,这里不做阐述如下链接所示https://blog.csdn.net/Boantong_/article/details/12848091 ...

  6. 如何借助python第三方库存取不同应用程序的用户名、密码

    在之前的一系列文章中,小爬分享了很多用Pywin32.uiAutomation.sap Gui Script等技术实现应用程序或者Web网站(如SAP.Excel.outLook邮件系统.OA系统)的 ...

  7. 2022-10-22 CSP赛前隔离时的模拟赛 2:3

    T1 简单红题,不懈于写. 锐评:镜子反射出来的竟然没有镜像一下. T2 坑人东西调了 2h. 类似于 round1 的 T4. 线性 \(\Theta(n)\) 过. T3 T4 其实简单,负边权要 ...

  8. DFS(深度优先搜索)洛谷P1162

    看大佬们dfs一遍就出结果,蒟蒻的我dfs了三遍,当然这题也可以用bfs做,但是dfs不用队列代码短一些. #include <iostream> #include <vector& ...

  9. JVM-Java虚拟机是怎么实现synchronized的?

    1. JVM的锁优化 今天我介绍了 Java 虚拟机中 synchronized 关键字的实现,按照代价由高至低可分为重量级锁.轻量级锁和偏向锁三种. 重量级锁会阻塞.唤醒请求加锁的线程.它针对的是多 ...

  10. Welcome to YARP - 5.身份验证和授权

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...