python时间间隔函数_关于python:如何计算两个时间字符串
之间的时间间隔
我有两次,⼀个开始和⼀个停⽌时间,格式为10:33:26(HH:MM:SS)。 我需要两次之间的区别。 我⼀直在浏览Python的⽂档和在线搜索,我想它会与⽇期时间和/或时间模块有关。 我不能让它正常⼯作,并在涉及⽇期时继续查如何执⾏此操作。
最终,我需要计算多个持续时间的平均值。 我得到了时间差异,我将它们存储在列表中。 我现在需要计算平均值。 我正在使⽤正则表达式解析原始时间然后做差异。
对于平均,我应该转换为秒然后平均?
您可以发布您尝试过的代码,我们可以从那⾥开始吗?
相关:查⽇期时间之间是否已经过了24⼩时 - Python
是的,肯定datetime是你需要的。具体来说,strptime函数将字符串解析为时间对象。
1
2
3
4
5from datetime import datetime
s1 = '10:33:26'
s2 = '11:15:49' # for example
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT)
这会得到⼀个包含两次之间差异的timedelta对象。你可以做任何你想做的事,例如将其转换为秒或将其添加到另⼀个datetime。
如果结束时间早于开始时间,则返回否定结果,例如s1 = 12:00:00和s2 = 05:00:00。如果您希望代码假设在这种情况下间隔跨越午夜(即它应该假设结束时间从不早于开始时间),则可以将以下⾏添加到上
⾯的代码中:
1
2
3if tdelta.days < 0:
tdelta = timedelta(days=0,
seconds=tdelta.seconds, microseconds=tdelta.microseconds)
(当然你需要在某处包含from datetime import timedelta)。感谢J.F. Sebastian指出这个⽤例。
在tdelta对象中days= -2及以上时,负时间⿊客将⽆效。
@chandresh是的,但如果没有超出问题中描述的其他信息(特别是⽇期),days永远不会是-2或更少。所以这种情况与此⽆关。
提⽰:要获得以秒为单位的时间增量,您必须调⽤al_seconds()。
试试这个 - 它可以有效地计时短期事件。如果某事花了⼀个多⼩时,那么最后的显⽰可能需要⼀些友好的格式。
1
2
6
7
8import time
start = time.time()
time.sleep(10) # or do something more productive
done = time.time()
elapsed = done - start
print(elapsed)
时间差以经过的秒数返回。
为什么这不是公认的答案?它很简单,它提供了⼀个可以与某些东西进⾏⽐较的值(我的命令执⾏时间超过2.5秒?)它在v2.7中有效
经过的时间是⼏秒钟吧?
@Mawg因为它没有回答OP的问题。他问的是如何⽐较他已经拥有的两种不同的特定格式,⽽不是如何通过计算代码中的事件来⽣成它们。他们是⾮常不同的问题。
看起来我需要考虑⼀下我读到的内容:-(
你不应该使⽤这个;使⽤单调时间(Python中的nic())。 time.time()可以向后(例如,当机器上的时间改变时,包括NTP校正)。
与问题⽆关
我投了这个,因为搜索"python时差"引出了我这个问题。这是代码正在寻!
这是⼀个⽀持到差异的解决⽅案,即使结束时间⼩于开始时间(午夜时间间隔),例如23:55:00-00:25:00(持续半⼩时):
1
2
3
4
5
6
7
8
9
10
11
12
13
17
18#!/usr/bin/env python
from datetime import datetime, time as datetime_time, timedelta
def time_diff(start, end):
if isinstance(start, datetime_time): # convert to datetime
assert isinstance(end, datetime_time)
start, end = [datetimebine(datetime.min, t) for t in [start, end]]
if start <= end: # e.g., 10:33:26-11:15:49
return end - start
else: # end < , 23:55:00-00:25:00
end += timedelta(1) # +day
assert end > start
return end - start
for time_range in ['10:33:26-11:15:49', '23:55:00-00:25:00']:
s, e = [datetime.strptime(t, '%H:%M:%S') for t in time_range.split('-')]
print(time_diff(s, e))
assert time_diff(s, e) == time_diff(s.time(), e.time())
产量
1
20:42:23
0:30:00
time_diff()返回⼀个timedelta对象,你可以直接传递(作为序列的⼀部分)到mean()函数,例如:1
2
3
4
5
6
7
8
9
11#!/usr/bin/env python
from datetime import timedelta
def mean(data, start=timedelta(0)):
"""Find arithmetic average."""
return sum(data, start) / len(data)
data = [timedelta(minutes=42, seconds=23), # 0:42:23
timedelta(minutes=30)] # 0:30:00
print(repr(mean(data)))
# -> datetime.timedelta(0, 2171, 500000) # days, seconds, microseconds
mean()结果也是timedelta()对象,您可以转换为秒(td.total_seconds()⽅法(⾃Python 2.7)),⼩时(td / timedelta(hours=1)(Python 3))等。
最后⼀个解决问题的答案。我不知道为什么这不是被接受的......
@ J.F。我想知道统计均值和⽅差函数现在是否直接与timedelta对象⼀起⼯作?有什么想法吗?此外,任何计算timedelta对象⽅差的帮助都是有⽤的。
@chandresh:不⽀持。您可以转换为秒/微秒来计算timedeltas的数学统计。
表⽰Python中时差的结构称为timedelta。如果start_time和end_time为datetime类型,则可以使⽤-运算符计算差值,如:
1diff = end_time - start_time
你应该在转换为特殊字符串格式之前这样做(例如在start_time.strftime(...)之前)。如果您已经有字符串表⽰,则需要使⽤strptime⽅法将其转换回时间/⽇期时间。
这个⽹站说试试:
1
2
3
4
5
6
7import datetime as dt
start="09:35:23"
end="10:23:00"
start_dt = dt.datetime.strptime(start, '%H:%M:%S')
end_dt = dt.datetime.strptime(end, '%H:%M:%S')
diff = (end_dt - start_dt)
diff.seconds/60
这个论坛使⽤time.mktime()
最好的答案......不幸的是..........
确保如果使⽤%p(上午/下午),则使⽤%I(12⼩时)⽽不是%H(24⼩时):/2/library/…
不确定它是否有⼀些缺点。
时间正则表达式java但看起来很整洁:)
1
2
3
4
5
6
7
8
9from datetime import datetime
lativedelta import relativedelta
t_a = w()
t_b = w()
def diff(t_a, t_b):
t_diff = relativedelta(t_b, t_a) # later/end time comes first!
return '{h}h {m}m {s}s'.format(h=t_diff.hours, m=t_diff.minutes, s=t_diff.seconds)
关于这个问题,你仍然需要像其他⼈先前所说的那样使⽤datetime.strptime()。
试试这个
1
2
3
4
5
6
7import datetime
import time
start_time = w().time().strftime('%H:%M:%S')
time.sleep(5)
end_time = w().time().strftime('%H:%M:%S')
total_time=(datetime.datetime.strptime(end_time,'%H:%M:%S') - datetime.datetime.strptime(start_time,'%H:%M:%S')) print total_time

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。