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. 「sdoi2019 - D2T2」移动金币

    对 @command_block 没有 implementation 做法的细化.理论来说可以通过,但因为我实现得较劣无法通过.:( 把金币中的空隙看作石子,就是一个阶梯 Nim 的模型(有总共 \( ...

  2. nginx ServerName匹配规则

    1.同一个主机配置不同端口,访问不同资源 worker_processes 1; events { worker_connections 1024; } http { include mime.typ ...

  3. 【matplotlib 实战】--堆叠面积图

    堆叠面积图和面积图都是用于展示数据随时间变化趋势的统计图表,但它们的特点有所不同.面积图的特点在于它能够直观地展示数量之间的关系,而且不需要标注数据点,可以轻松地观察数据的变化趋势.而堆叠面积图则更适 ...

  4. it 作形式主语:It's no good doing sth.

    It's no good doing sth. 这个 句型其实是一个省 略介词 in 的句型,完整形式是 It's no good in doing sth. 其中, good 是形容词,和介词 in ...

  5. struct 结构体【GO 基础】

    〇.前言 虽然 Go 语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念,但是可以通过结构体的内嵌,再配合接口,来实现面向对象,甚至具有更高的扩展性和 ...

  6. 图形学、02 推导证明 | 任意一点经过透视投影后 z 坐标相对于之前有什么变化

    齐次坐标知识点: \(\begin{bmatrix} x \\ y \\ z \\ 1 \\\end{bmatrix} \Rightarrow\begin{bmatrix} nx \\ ny \\ n ...

  7. 轻松掌握组件启动之MongoDB(下):高可用复制集架构环境搭建

    引言 上一章节中,我们详细介绍了在典型的三节点复制集环境中搭建MongoDB的步骤和注意事项.从准备配置文件到启动MongoDB进程,我们一步步指导读者完成了环境的设置.在本章节中,我们将进一步深入, ...

  8. 【Unity3D】水面特效

    1 前言 ​ 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...

  9. FFMPEG+SDL简单视频播放器——人脸检测

    前言 最近突发奇想,给播放器加上一个人脸检测的功能(事情似乎朝着奇怪的方向发展了,谁家的播放器会需要去检测人脸啊!),主要的目的是为了学习opencv,尝试将ffmpeg和opencv融合在一起使用. ...

  10. VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)

    账号秘密都对,但是缺登录不成功的问题 诀窍可能是: 在属性设置中把LeetCode版本改成cn.点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可. 大 ...