Python中两个日期之间的天数

Bem*_*mmu 119 python date

查看两个日期之间已经过了多少天的最短途径是什么?这就是我现在正在做的事情.

math.floor((b - a).total_seconds()/float(86400))
Run Code Online (Sandbox Code Playgroud)

Pau*_*ite 215

假设您确实有两个日期对象,您可以从另一个中减去一个并查询结果timedelta对象的天数:

>>> from datetime import date
>>> a = date(2011,11,24)
>>> b = date(2011,11,17)
>>> a-b
datetime.timedelta(7)
>>> (a-b).days
7
Run Code Online (Sandbox Code Playgroud)

它也适用于日期时间 - 我认为它会向下舍入到最近的一天:

>>> from datetime import datetime
>>> a = datetime(2011,11,24,0,0,0)
>>> b = datetime(2011,11,17,23,59,59)
>>> a-b
datetime.timedelta(6, 1)
>>> (a-b).days
6
Run Code Online (Sandbox Code Playgroud)

  • 凉意.不知怎的,我总是假设"天"指的是差异的一天部分.因此,例如2010年和2011年之间的差异将是0天和1年,但事实证明它确实报告了我想要的365天. (2认同)

DNS*_*DNS 35

你的意思是完整的日历日,或24小时的团体?

仅仅24小时,假设您正在使用Python的日期时间,那么timedelta对象已经有一个days属性:

days = (a - b).days
Run Code Online (Sandbox Code Playgroud)

对于日历日,您需要向下舍入到最近的一天,并且b到最近的一天,摆脱两边的部分日:

roundedA = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
roundedB = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
days = (roundedA - roundedB).days
Run Code Online (Sandbox Code Playgroud)

  • 日历与24小时不同的好地方.一个问题是你为什么要加1天.我认为上述情况完全没有它. (3认同)

M S*_*M S 6

尝试:

(b-a).days
Run Code Online (Sandbox Code Playgroud)

我试过用b和a类型datetime.date.


Mat*_*ock 5

引用我对其他答案的评论.这就是我如何计算基于24小时和日历天数的天数差异.days属性适用于24小时,该功能最适合日历检查.

from datetime import timedelta, datetime

def cal_days_diff(a,b):

    A = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
    B = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
    return (A - B).days

if __name__ == '__main__':

    x = datetime(2013, 06, 18, 16, 00)
    y = datetime(2013, 06, 19, 2, 00)

    print (y - x).days          # 0
    print cal_days_diff(y, x)   # 1 

    z = datetime(2013, 06, 20, 2, 00)

    print (z - x).days          # 1
    print cal_days_diff(z, x)   # 2 
Run Code Online (Sandbox Code Playgroud)