【python】datetime模块计算时间差
一、问题背景
最近有小伙伴反馈接口平台的测试计划执行耗时显示有误,比如执行实际时长超过10s,但是报告中显示总耗时小于1s
显示耗时统计出现问题
二、问题排查
开始和结束时间是否有误
开始时间:
2022-04-24 10:51:23.677632
结束时间:
2022-04-24 10:51:35.713161
可见起止的时间获取没有问题
计算方式
round((end_time-start_time).microseconds/1000000, 2)
计算结果0.04s
接下来看看为什么这样的计算方式出错
三、datetime
datetime模块可以生成所需日期和时间的字符串,还可以进行时间差计算
3.1 时间差计算
import datetime
datetime.datetime.now()
# 生成一个datetime.datetime对象,包含了年、月、日、时、分、秒、毫秒七个参数
# 可以直接获取年、月、日等数值:
t = datetime.datetime.now()print(t.year, t.month, t.day, t.hour, t.minute, t.second, t.microsecond)
print(type(t.year), type(t.month), type(t.day), type(t.hour), type(t.minute), type(t.second), type(t.microsecond))# output:
2022 4 24 11 3 25 336771
<class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'> <class 'int'>
3.2 时间和日期的获取
# 可以分别获得日期,时间:
print(t.date(), type(t.date()))
print(t.time(), type(t.time()))
# output:
2022-04-24 <class 'datetime.date'>
11:06:50.314211 <class 'datetime.time'>
3.3 格式化输出字符串
可以按照需要格式化输出字符串:datetime.datetime.strftime("format")
指令 | 意义 | 示例 |
---|---|---|
%a | 当地工作日的缩写 | Sun, Mon, …, Sat |
%A | 当地工作日的全名 | Sunday, Monday, …, Saturday |
%w | 以十进制数显示的工作日,其中0表示星期日,6表示星期六 | 0, 1, …, 6 |
%d | 补零后,以十进制数显示的月份中的一天 | 01, 02, …, 31 |
%b | 当地月份的缩写 | an, Feb, …, Dec |
%B | 当地月份的全名 | January, February, …, December |
%m | 补零后,以十进制数显示的月份 | 01, 02, …, 12 |
%y | 补零后,以十进制数表示的,不带世纪的年份 | 00, 01, …, 99 |
%Y | 十进制数表示的带世纪的年份 | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
%H | Hour (24-hour clock) | 00, 01, …, 23 |
%I | Hour (12-hour clock) | 01, 02, …, 12 |
%M | 补零后,以十进制数显示的分钟 | 00, 01, …, 59 |
%S | 补零后,以十进制数显示的秒 | 00, 01, …, 59 |
%U | Week number of the year (Sunday as the first day of the week) | 00, 01, …, 53 |
%W | Week number of the year (Monday as the first day of the week) | 00, 01, …, 53 |
%c | 本地化的适当日期和时间表示 | Tue Aug 16 21:30:00 1988 |
%x | 本地化的适当日期表示 | 08/16/1988 |
%X | 本地化的适当时间表示 | 21:30:00 |
%% | 字面的 ‘%’ 字符 | 字面的 ‘%’ 字符 |
格式可以用任意连接符组合成你想要的格式
import datetime
t = datetime.datetime.now()
print(t.strftime("%Y%m%d"),type(t.strftime("%Y%m%d")))
print(t.strftime("%Y-%m_%d:%H-%M:%S"))# output:
20220424 <class 'str'>
2022-04_24:11-16:36
注意,此时返回的就是字符串
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
通过datetime.timedelta类创建一个时间差,用来进行计算
四、问题解决
通过datetime
的使用可以看到,(end_time-start_time).microseconds
获取的是毫秒这个维度的值,而非所有的值
import datetime
# 2022-04-24 10:51:23.677632
start_time = datetime.datetime(2022, 4, 24, 10, 51, 23, 677632)
# 2022-04-24 10:51:35.713161
end_time = datetime.datetime(2022, 4, 24, 10, 51, 35, 713161)print("days: ", (end_time-start_time).days)
print("seconds: ", (end_time-start_time).seconds)
print("microseconds: ", (end_time-start_time).microseconds)# output:
days: 0
seconds: 12
microseconds: 35529
如果想要获取秒级时间差,而且保留2位小数,可以
(end_time-start_time).seconds + round((end_time-start_time).microseconds/1000000, 2)
也可以使用total_seconds()方法
round((end_time-start_time).total_seconds(), 2)
问题解决
五、秒数间隔
datetime计算秒数间隔
import datetime
# 2022-04-24 10:51:23.677632
start_time = datetime.datetime(2022, 4, 24, 10, 51, 23, 677632)
# 2022-04-25 11:52:35.713161
end_time = datetime.datetime(2022, 4, 25, 11, 52, 35, 713161)print("seconds: ", (end_time-start_time).seconds)# output:
seconds: 3672
这两个时间相差1d+,但是输出的结果中仅为3672s
原因在于seconds只能计算同一天的间隔,所以事先要计算出差值的天数,用天数144060+秒数才能得到正确的结果
对于这种情况一般使用total_seconds()来解决
import datetime
# 2022-04-24 10:51:23.677632
start_time = datetime.datetime(2022, 4, 24, 10, 51, 23, 677632)
# 2022-04-25 11:52:35.713161
end_time = datetime.datetime(2022, 4, 25, 11, 52, 35, 713161)print((end_time-start_time).total_seconds())# output:
total_seconds: 90072.035529
【python】datetime模块计算时间差相关推荐
- python利用datetime模块计算时间差
python中通过datetime模块可以很方便的计算两个时间的差,datetime的时间差单位可以是天.小时.秒,甚至是微秒,下面我们就来详细看下datetime的强大功能吧 今天写了点东西,要计算 ...
- python 时间差模块_python利用datetime模块计算时间差
今天写了点东西,要计算时间差,我记得去年写过,于是今天再次mark一下,以免自己忘记 In [27]: from datetime import datetime In [28]: a=datetim ...
- Python datetime time计算时间差
一.计算时间差 """ python主文件 """ # -*- coding: utf-8 -*-import time"&quo ...
- python时间计算_python利用datetime模块计算时间差、当前时间多加一天、一小时、一分钟和常用操作...
记录下试用datetime的一些常用操作In [1]: from datetime import datetime In [2]: aa = datetime.now() In [3]: aa Out ...
- python 利用datetime 模块计算时间差、当前时间多加一天、一小时、一分钟等操作
1. 常用操作 from datetime import datetimeaa = datetime.now()print(aa) # datetime.datetime(2021, 9, 24, 1 ...
- python datetime模块-Python datetime模块使用方法小结
datetime模块 当前日期 datetime.date.today() datetime.date(2020, 4, 24) 转换元祖 >>> datetime.date.tim ...
- python ovito模块计算某一类原子的MSD均方位移
此文章为用python ovito模块计算某一类原子的MSD ovito.modifiers.CalculateDisplacementsModifier 基于ovito.pipline.Refer ...
- python datetime模块
一.datetime模块介绍 (一).datetime模块中包含如下类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时 ...
- linux datetime,Python datetime模块示例详解
一.datetime模块介绍 (一).datetime模块中包含如下类: 类名功能说明 date 日期对象,常用的属性有year, month, day time 时间对象 datetime 日期时间 ...
最新文章
- 2019ug最新版本是多少_UGNX将在2019年发布最新版本,也是最后一个版本,让人更意想不到的是它的这项新功能!...
- 抖音开放平台 php-sdk 注意事项
- 最有影响力的自然语言处理NLP论文
- 跟前腾讯总监学Java实战项目
- 遮挡摄像头 判断_长治一学校门口树枝遮挡信号灯,危险!
- Ajax — 聊天机器人演示
- JAVA入门级教学之(算数运算符)
- php打印错误日志到本地,nginx+php怎么打印php的错误日志?
- PowerMock介绍
- Java 根据枚举的名字得到枚举的实例
- 滑动窗口1——无重复字符的最长字串
- Spring入门第十七课
- html中ip输入格式正则表达式,通过正则表达式验证IP和端口格式的正确性
- 关于flymcu烧录stm32芯片超时的问题解决
- 清华大学:模拟电子技术基础
- ios 手势返回监听方法
- 利用Matlab进行图像处理
- 蒸汽平台进dota2显示连接不上服务器,蒸汽平台dota2连不上服务器
- URP关于多个摄相机的性能优化
- Android | 教你如何开发一键银行卡绑定功能
热门文章
- 使用APICloud低代码开发平台开发物流仓储app
- 解决使用专有网络的阿里云服务器无法远程连接的问题
- 千万级车联网 MQTT 消息平台架构设计
- Global.asa文件使用详细介绍
- CAD图纸中CAD文字边界为锯齿形的原因及解决办法
- 视频教程-finereport从入门到实战视频教程-大数据
- 先进的驾驶系统(Advanced Driver Assistance Systems)即高级驾驶员辅助系统
- 用html编写一个红绿灯,利用js实现简易红绿灯
- Linux配置NFS文件共享存储
- ES使用聚合查询报错exception [type=search_phase_execution_exception, reason=all shards failed]