为什么Python中的datetime减法不会减去天数?

时间:2017-07-31 18:36:07

标签: python datetime

我希望如果我在Python中减去两个日期时间,我会得到减去日期,周数等的日期时间......

这是我的样本。我得到的只是减去小时,分钟和秒。日期变量取自数据库。在type()函数上返回datetime.datetime。

def elapsed_time(date):
    """
        Custom filter that format time to "x time age".
    :param date:
    :return:
    """
    if date is None:
        return 'No time given'
    now = datetime.datetime.now()
    elapsed = (now - date).seconds
    if elapsed < 60:
        return '{} seconds ago'.format(elapsed)
    elif elapsed < 3600:
        return '{} minutes ago'.format(int(elapsed / 60))
    elif elapsed < 86400:
        return '{} hours ago'.format(int(elapsed / 3600))
    else:
        return '{} days ago'.format((elapsed / 86400))

我目前的例子:

鉴于datetime是2017-07-27 01:18:58.398231

当前日期时间是2017-07-31 20:23:36.095440

结果是19小时(68677秒)

2 个答案:

答案 0 :(得分:0)

以下行仅返回&#39;秒&#39;差异的组成部分,不考虑它的天/小时/分钟组成部分。

elapsed = (now - date).seconds

您需要的是使用total_seconds()而不是仅仅秒,因为您在后续条件中尝试比较的是什么。使用方法如下:

elapsed = (now - date).total_seconds()

其余代码保持不变,您将获得所需的输出。

答案 1 :(得分:0)

如果你减去两个日期时间对象,结果将是timedelta

diff.default

如果第二个时间步长早于第一个时间步,则结果可能会令人恼火。请参阅示例中的否定日。

import datetime as dt import time t1 = dt.datetime.now() time.sleep(4) t2 = dt.datetime.now() dt1 = t2 - t1 print(dt1) print(dt1.total_seconds()) print(type(dt1)) dt2 = t1 - t2 print(dt2.total_seconds()) print(dt2) print(type(dt2)) 只是结果的一部分,您正在寻找

dt.seconds