【问题标题】:Days between two dates? [duplicate]两个日期之间的天数? [复制]
【发布时间】:2012-01-05 16:53:31
【问题描述】:

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

math.floor((b - a).total_seconds()/float(86400))

【问题讨论】:

  • 只是两个日期,还是包含时间信息?
  • date1 = date(2018,7,3) date2 = date(2018,9,29) days = (date2-date1).days # 天数已经在这里 print("总周数 {} 和天{}".format(days//7, days%7));

标签: python date


【解决方案1】:

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

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

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

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

【讨论】:

  • 酷。不知何故,我总是假设“天”只是指差异的天部分。因此,例如,2010 年和 2011 年之间的差异是 0 天和 1 年,但事实证明它确实按照我的意愿报告了 365 天。
  • @Bemmu:是的——我认为timedelta 不会报告任何超过几天的单位(尽管我可能是错的)。
  • 我在计算几个小时之间的时间差,比如第 1 天的 23 点和第 2 天的 01 点。timedelta 在这些情况下返回 0,这不是我想了。我正在寻找日期差异。作为解决方案,我 converted the datetime to date 并按预期工作!
【解决方案2】:

您是指完整的日历日,还是 24 小时一组?

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

days = (a - b).days

对于日历日,您需要将 a 向下舍入到最近的一天,将 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

【讨论】:

  • 日历天与 24 小时不同的好地方。一个问题是为什么要加 1 天。我认为没有它,上面的工作就完美了。
  • 这是日历日的检查。假设 A 是 2013-06-18 的 16:00,B 是 2013-06-19 的 02:00;一个日历日过去了,但 (B - A).days 将返回零,因为增量只有 10 小时。
  • 这就是我让 DNS 你的代码返回 2 的重点,因为你又增加了一天。不加 1 天就返回 1。为什么要加一天?
  • 查看调整后代码的新答案。
  • 对不起,你是对的;我不知道我为什么这样做。已更新。
【解决方案3】:

试试:

(b-a).days

我尝试使用 b 和 a 类型的 datetime.date

【讨论】:

    【解决方案4】:

    在其他答案上引用我的 cmets。这就是我如何计算基于 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 
    

    【讨论】:

    • 应该是 (B - A).days 才能得到准确的差异
    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多