我有两个不同的日期,我想知道它们的天数之差。日期格式为“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

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

我需要一个函数,其中我可以给出两个日期,结果将是一个int日期差异在天。


当前回答

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

1)代码会抛出maugeerra提到的错误 2)如果将代码更改为如下:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)

这将把你的datetime对象转换为字符串,但有两件事

1)尝试做d2 - d1会失败,因为你不能在字符串和上使用减号运算符 2)如果你读了上面回答的第一行,你想在两个datetime对象上使用-操作符,但是,你只是将它们转换为字符串

我发现你只需要以下几点:

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

其他回答

试试这个:

data=pd.read_csv('C:\Users\Desktop\Data Exploration.csv')
data.head(5)
first=data['1st Gift']
last=data['Last Gift']
maxi=data['Largest Gift']
l_1=np.mean(first)-3*np.std(first)
u_1=np.mean(first)+3*np.std(first)


m=np.abs(data['1st Gift']-np.mean(data['1st Gift']))>3*np.std(data['1st Gift'])
pd.value_counts(m)
l=first[m]
data.loc[:,'1st Gift'][m==True]=np.mean(data['1st Gift'])+3*np.std(data['1st Gift'])
data['1st Gift'].head()




m=np.abs(data['Last Gift']-np.mean(data['Last Gift']))>3*np.std(data['Last Gift'])
pd.value_counts(m)
l=last[m]
data.loc[:,'Last Gift'][m==True]=np.mean(data['Last Gift'])+3*np.std(data['Last Gift'])
data['Last Gift'].head()

使用-获取两个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)

我尝试了一些代码,但最终使用了一些简单的东西(在Python 3中):

from datetime import datetime
df['difference_in_datetime'] = abs(df['end_datetime'] - df['start_datetime'])

如果你的start_datetime和end_datetime列是datetime64[ns]格式,datetime会理解它,并返回天数+时间戳的差值,时间戳是timedelta64[ns]格式。

如果你只想看到以天为单位的差异,你可以通过使用(也适用于时间部分)只分离start_datetime和end_datetime的日期部分:

df['start_date'] = df['start_datetime'].dt.date
df['end_date'] = df['end_datetime'].dt.date

然后运行:

df['difference_in_days'] = abs(df['end_date'] - df['start_date'])

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

1)代码会抛出maugeerra提到的错误 2)如果将代码更改为如下:

...
    d1 = d1.strftime("%Y-%m-%d")
    d2 = d2.strftime("%Y-%m-%d")
    return abs((d2 - d1).days)

这将把你的datetime对象转换为字符串,但有两件事

1)尝试做d2 - d1会失败,因为你不能在字符串和上使用减号运算符 2)如果你读了上面回答的第一行,你想在两个datetime对象上使用-操作符,但是,你只是将它们转换为字符串

我发现你只需要以下几点:

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

pd。date_range (' 2019-01-01 ', ' 2019-02-01 ') .shape [0]