计算与 unix $date 的时差
Calculating time difference from unix $date
我有一对来自 unix 日期的时间戳:
alvas@ubi:~$ date
Wed May 20 01:04:43 CEST 2015
如何计算时间戳对之间的时间差?
注意: 我没有 $date
的完整日期时间戳,只有 hr:min:sec
的时间留在我的日志文件中。
例如,timediff(start, end)
:
timediff('11:12:10', '19:58:50')
timediff('15:17:09', '03:11:10')
[输出]:
31600
42841
[out2]:
8 hrs 46 mins 40 secs (31600 secs)
11 hrs 54 mins 1 secs (42841 secs)
如end < start
,则按次日处理。
我试过下面的脚本,但是有没有更简单的方法?
def timediff(start, end):
start_hr, start_min, start_sec = map(float, start.split(':'))
end_hr, end_min, end_sec = map(float, end.split(':'))
if end_hr < start_hr:
end_hr = end_hr + 24
if end_min < start_min:
end_min = end_min + 60
end_hr -= 1
if end_sec < start_sec:
end_sec = end_sec + 60
end_min -= 1
num_hrs = end_hr - start_hr
num_mins = end_min - start_min
num_secs = end_sec - start_sec
total_seconds = 60*60*num_hrs + 60*num_mins+num_secs
total_time = " ".join([str(num_hrs), 'hrs', str(num_mins), 'mins', str(num_secs), 'secs'])
return total_seconds, total_time
print timediff('11:12:10', '19:58:50')
print timediff('15:17:09', '03:11:10')
[输出]:
(31600.0, '8.0 hrs 46.0 mins 40.0 secs')
(42841.0, '11.0 hrs 54.0 mins 1.0 secs')
当我尝试时 dateutil.parser.parse
:
>>> from dateutil.parser import parse as dtparse
>>> dtparse('19:58:50') - dtparse('11:12:10')
datetime.timedelta(0, 31600)
>>> dtparse('03:11:10') - dtparse('15:17:09')
datetime.timedelta(-1, 42841)
dateutil.parser(pip install python-dateutil
) 几乎可以解析任何东西......及其时区感知
from dateutil.parser import parse as dtparse
print dtparse("Wed May 20 01:04:43 CEST 2015") - dtparse("Wed May 20 00:02:43 CEST 2015")
>>> print dtparse("Fri May 22 01:04:43 CEST 2015") - dtparse("Wed May 20 00:02:43
CEST 2015")
2 days, 1:02:00
>>> print dtparse("15:22:36") - dtparse("12:00:45")
3:21:51 # 3 hours, 21 minutes, 51 seconds
此处...如果您不知道哪个时间戳更晚,这将起作用...
def tdiff(t1,t2):
if t1 > t2:t1,t2 = t2,t1
return t2-t1
print tdiff(dtparse('11:12:10'), dtparse('19:58:50'))
如果你想在顺序错误的情况下减去一天,试试这个
def tdiff(t1,t2):
if t1 > t2:t1 - datetime.timedelta(days=1)
return t2-t1
可能更容易使用datetime:
import datetime
def timediff(t1, t2):
d1=datetime.datetime.strptime(t1, "%H:%M:%S")
d2=datetime.datetime.strptime(t2, "%H:%M:%S")
if d2<d1:
d1-=datetime.timedelta(days=1)
return ((d2-d1).total_seconds(), str(d2-d1))
>>> timediff('11:12:10', '19:58:50')
(31600.0, '8:46:40')
>>> timediff('15:17:09', '03:11:10')
(42841.0, '11:54:01')
我有一对来自 unix 日期的时间戳:
alvas@ubi:~$ date
Wed May 20 01:04:43 CEST 2015
如何计算时间戳对之间的时间差?
注意: 我没有 $date
的完整日期时间戳,只有 hr:min:sec
的时间留在我的日志文件中。
例如,timediff(start, end)
:
timediff('11:12:10', '19:58:50')
timediff('15:17:09', '03:11:10')
[输出]:
31600
42841
[out2]:
8 hrs 46 mins 40 secs (31600 secs)
11 hrs 54 mins 1 secs (42841 secs)
如end < start
,则按次日处理。
我试过下面的脚本,但是有没有更简单的方法?
def timediff(start, end):
start_hr, start_min, start_sec = map(float, start.split(':'))
end_hr, end_min, end_sec = map(float, end.split(':'))
if end_hr < start_hr:
end_hr = end_hr + 24
if end_min < start_min:
end_min = end_min + 60
end_hr -= 1
if end_sec < start_sec:
end_sec = end_sec + 60
end_min -= 1
num_hrs = end_hr - start_hr
num_mins = end_min - start_min
num_secs = end_sec - start_sec
total_seconds = 60*60*num_hrs + 60*num_mins+num_secs
total_time = " ".join([str(num_hrs), 'hrs', str(num_mins), 'mins', str(num_secs), 'secs'])
return total_seconds, total_time
print timediff('11:12:10', '19:58:50')
print timediff('15:17:09', '03:11:10')
[输出]:
(31600.0, '8.0 hrs 46.0 mins 40.0 secs')
(42841.0, '11.0 hrs 54.0 mins 1.0 secs')
当我尝试时 dateutil.parser.parse
:
>>> from dateutil.parser import parse as dtparse
>>> dtparse('19:58:50') - dtparse('11:12:10')
datetime.timedelta(0, 31600)
>>> dtparse('03:11:10') - dtparse('15:17:09')
datetime.timedelta(-1, 42841)
dateutil.parser(pip install python-dateutil
) 几乎可以解析任何东西......及其时区感知
from dateutil.parser import parse as dtparse
print dtparse("Wed May 20 01:04:43 CEST 2015") - dtparse("Wed May 20 00:02:43 CEST 2015")
>>> print dtparse("Fri May 22 01:04:43 CEST 2015") - dtparse("Wed May 20 00:02:43
CEST 2015")
2 days, 1:02:00
>>> print dtparse("15:22:36") - dtparse("12:00:45")
3:21:51 # 3 hours, 21 minutes, 51 seconds
此处...如果您不知道哪个时间戳更晚,这将起作用...
def tdiff(t1,t2):
if t1 > t2:t1,t2 = t2,t1
return t2-t1
print tdiff(dtparse('11:12:10'), dtparse('19:58:50'))
如果你想在顺序错误的情况下减去一天,试试这个
def tdiff(t1,t2):
if t1 > t2:t1 - datetime.timedelta(days=1)
return t2-t1
可能更容易使用datetime:
import datetime
def timediff(t1, t2):
d1=datetime.datetime.strptime(t1, "%H:%M:%S")
d2=datetime.datetime.strptime(t2, "%H:%M:%S")
if d2<d1:
d1-=datetime.timedelta(days=1)
return ((d2-d1).total_seconds(), str(d2-d1))
>>> timediff('11:12:10', '19:58:50')
(31600.0, '8:46:40')
>>> timediff('15:17:09', '03:11:10')
(42841.0, '11:54:01')