Python中两个日期之间的差异

mau*_*rra 106 python date

我有两个不同的日期,我想知道它们之间的天数差异.日期格式为YYYY-MM-DD.

我有一个函数可以将给定数字添加或减去日期:

def addonDays(a, x):
   ret = time.strftime("%Y-%m-%d",time.localtime(time.mktime(time.strptime(a,"%Y-%m-%d"))+x*3600*24+3600))      
   return ret
Run Code Online (Sandbox Code Playgroud)

其中A是日期,x是我想要添加的天数.结果是另一个日期.

我需要一个函数,我可以给两个日期,结果将是一个日期差异为天的int.

Fre*_*Foo 224

使用-得到两者之间的区别datetime对象,并采取days会员.

from datetime import datetime

def days_between(d1, d2):
    d1 = datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.strptime(d2, "%Y-%m-%d")
    return abs((d2 - d1).days)
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.要清楚,`(d2 - d1)`的结果将是[`timedelta`](http://docs.python.org/library/datetime.html#datetime.timedelta)对象. (30认同)
  • 你能否也提到 [`total_seconds`](https://docs.python.org/3/library/datetime.html#datetime.timedelta.total_seconds)?我认为这很重要,因为这是我在不阅读文档的情况下尝试“秒”时所期望的结果。 (7认同)
  • 当我尝试在 timedelta 对象上执行 .days() 时,我收到 TypeError: 'int' object is not callable 并且文档也没有提及它(https://docs.python.org/2/library/datetime.days())。 html)。 (2认同)

0x8*_*00D 22

另一个简短的解决

from datetime import date

def diff_dates(date1, date2):
    return abs(date2-date1).days

def main():
    d1 = date(2013,1,1)
    d2 = date(2013,9,13)
    result1 = diff_dates(d2, d1)
    print '{} days between {} and {}'.format(result1, d1, d2)
    print ("Happy programmer's day!")

main()
Run Code Online (Sandbox Code Playgroud)

  • 不完全不需要`diff_dates`函数中的`if`吗?通过绝对值的定义,`abs(date1-date2)`将始终等于`abs(date2-date1)`. (2认同)

Tom*_*koo 10

您可以使用第三方库 dateutil,它是内置datetime.

使用该模块解析日期parser非常简单:

from dateutil import parser

date1 = parser.parse('2019-08-01')
date2 = parser.parse('2019-08-20')

diff = date2 - date1

print(diff)
print(diff.days)
Run Code Online (Sandbox Code Playgroud)

根据已删除的重复项中的答案进行回答


sch*_*ing 6

我尝试了上面 larsmans 发布的代码,但是存在几个问题:

1)原样的代码将抛出 mauguerra 提到的错误 2)如果将代码更改为以下内容:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)
Run Code Online (Sandbox Code Playgroud)

这会将您的日期时间对象转换为字符串,但是有两件事

1)尝试执行 d2 - d1 将会失败,因为您无法在字符串上使用减号运算符,并且 2)如果您阅读了上述答案的第一行,您想在两个日期时间对象上使用 - 运算符,但是,您只需将它们转换为字符串

我发现你实际上只需要以下内容:

import datetime

end_date = datetime.datetime.utcnow()
start_date = end_date - datetime.timedelta(days=8)
difference_in_days = abs((end_date - start_date).days)

print difference_in_days
Run Code Online (Sandbox Code Playgroud)