Python:两次之间的差异

时间:2017-10-14 15:43:51

标签: python python-2.7

我正在尝试计算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年

3 个答案:

答案 0 :(得分:2)

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

python how to convert datetime dates to decimal years

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

答案 1 :(得分:2)

两个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

这种方法略显简单,因为它没有考虑到月份或闰年的不规则性。 365和366天之间的差异不应该出现在你想要的准确度范围内,所以你可以忽略它。这几个月,您是否希望30天为一个月,或者您希望,例如,从2017年8月1日到2017年1月1日,注册为一个月?这会使事情复杂化,最多提高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'

答案 2 :(得分:2)

您可以使用pandas转换为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)