如果我有两个约会(例如。'8/18/2008'和'9/26/2008'),怎样才能得到这两个日期之间的天数?


当前回答

还有一个尚未提到的datetime.toordinal()方法:

import datetime
print(datetime.date(2008,9,26).toordinal() - datetime.date(2008,8,18).toordinal())  # 39

https://docs.python.org/3/library/datetime.html#datetime.date.toordinal

date.toordinal () 返回日期的预期格里高利历序数,其中第一年的1月1日序数为1。对于任意日期对象d, Date.fromordinal (d.toordinal()) == d。

似乎很适合计算日差,但可读性不如timedelta.days。

其他回答

from datetime import datetime
start_date = datetime.strptime('8/18/2008', "%m/%d/%Y")
end_date = datetime.strptime('9/26/2008', "%m/%d/%Y")
print abs((end_date-start_date).days)

如果你想自己编写计算代码,那么这里有一个函数,它将返回给定年、月和日的序数:

def ordinal(year, month, day):
    return ((year-1)*365 + (year-1)//4 - (year-1)//100 + (year-1)//400
         + [ 0,31,59,90,120,151,181,212,243,273,304,334][month - 1]
         + day
         + int(((year%4==0 and year%100!=0) or year%400==0) and month > 2))

此功能与日期兼容。datetime模块中的Toordinal方法。

两个日期的差日数如下所示:

print(ordinal(2021, 5, 10) - ordinal(2001, 9, 11))

from datetime import date
def d(s):
  [month, day, year] = map(int, s.split('/'))
  return date(year, month, day)
def days(start, end):
  return (d(end) - d(start)).days
print days('8/18/2008', '9/26/2008')

当然,这假设您已经验证了日期的格式为r'\d+/\d+/\d+'。

对于计算日期和时间,有几个选项,但我将写简单的方式:

from datetime import timedelta, datetime, date
import dateutil.relativedelta

# current time
date_and_time = datetime.now()
date_only = date.today()
time_only = datetime.now().time()

# calculate date and time
result = date_and_time - timedelta(hours=26, minutes=25, seconds=10)

# calculate dates: years (-/+)
result = date_only - dateutil.relativedelta.relativedelta(years=10)

# months
result = date_only - dateutil.relativedelta.relativedelta(months=10)

# week
results = date_only - dateutil.relativedelta.relativedelta(weeks=1)

# days
result = date_only - dateutil.relativedelta.relativedelta(days=10)

# calculate time 
result = date_and_time - timedelta(hours=26, minutes=25, seconds=10)
result.time()

希望能有所帮助

如果您有两个date对象,您可以将它们相减,这将计算一个timedelta对象。

from datetime import date

d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print(delta.days)

文档的相关部分: https://docs.python.org/library/datetime.html。

请看另一个例子。