[英]Python: Difference between two times
我试图计算Python中两个日期之间的时差,并以天,周,月和年表示此时差。
我的Python代码如下:
purDate = datetime.datetime.strptime(queryPurchaseDate (purID), "%Y-%m-%d %H:%M:%S")
now = datetime.datetime.now()
print 'Purchase date/time : ',purDate.strftime("%Y-%m-%d %H:%M:%S")
print 'Current date/time : ',now.strftime("%Y-%m-%d %H:%M:%S")
hold = now - purDate
print hold
该代码的结果如下:
bash-3.2$ ./test.py
Purchase date/time : 2017-10-10 00:00:00
Current date/time : 2017-10-14 17:33:39
4 days, 17:33:39.866069
bash-3.2$
我不希望将两个日期之间的差表示为4天,而是将其表示为:17:33:39.866069,如下所示:4.65天或0.66周或0.15个月或0.01年
您可以使用熊猫将其转换为timedelta
对象,然后执行后续的数学运算
delta = pd.Timedelta(delta)
delta.total_seconds()/(24*60*60) # this will give the timedelta in days
演示版
import pandas as pd
import datetime
time1 = datetime.datetime.now()
time2 = '2017-10-01 00:00:00'
time2 = pd.to_datetime(time2)
delta = time1 - time2
print(delta)
13 days 22:03:50.081000
delta = pd.Timedelta(delta)
print(delta.total_seconds()/(24*60*60))
13.909289537037038
编辑:
无需使用熊猫。 正如@ Reti43解释的那样,您可以只使用delta.total_seconds()/(24*60*60)
两个datetime
对象之间的差异是一个timedelta
对象。 您可以用秒表示该差异,然后使用日/周/月/年中的总秒数来获得比率。
>>> diff = timedelta(days=4, seconds=17 * 3600 + 33 * 60 + 39.866069)
>>> print(diff)
4 days, 17:33:39.866069
>>> diff.total_seconds() / 86400
4.731711412835648
>>> diff.total_seconds() / (86400 * 7)
0.6759587732622354
>>> diff.total_seconds() / (86400 * 30)
0.15772371376118827
>>> diff.total_seconds() / (86400 * 365)
0.012963592911878487
这种方法有点简单,因为它没有考虑月份或leap年的不规律性。 365天和366天之间的差异不应显示在所需的精度范围内,因此您可以忽略这一点。 对于这几个月,您是否希望30天连续一个月,还是希望例如从01-08-2017到01-09-2017注册一个月? 这样做最多会使精度复杂化0.01。
def timedelta_to(time_diff, unit='day'):
options = {'day': 86400,
'week': 86400 * 7,
'month': 86400 * 30,
'year': 86400 * 365,
}
# default to days for an invalid unit of choice,
# though warning to user might be another option
if unit not in options:
unit = 'day'
duration = time_diff.total_seconds() / options[unit]
return '{0:.2f} {1}s'.format(duration, unit.title())
您可以像这样使用它。
>>> timedelta_to(diff)
'4.73 Days'
>>> timedelta_to(diff, 'month')
'0.16 Months'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.