繁体   English   中英

Python:两次相差

[英]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年

您可以在这里找到类似的解决方案:

Python如何将日期时间日期转换为十进制年份

其他选项包括分隔时间和日期。 在这种情况下,您可以将时间部分转换为天数并将其添加到天数中。

您可以使用熊猫将其转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM