web-dev-qa-db-ja.com

Pythonの2つの日付の違い

2つの異なる日付があり、それらの間の日数の違いを知りたいです。日付の形式は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は追加する日数です。そして、結果は別の日付です。

2つの日付を指定できる関数が必要です。結果は、日付の日数が異なるintになります。

94
mauguerra

-を使用して、2つの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)
199
Fred Foo

別の短い解決策:

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()
20
0x8BADF00D

上記のlarsmansが投稿したコードを試しましたが、いくつか問題があります。

1)そのままのコードは、mauguerraが述べたエラーをスローします。2)コードを次のように変更した場合:

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

これにより、日時オブジェクトが文字列に変換されますが、2つのこと

1)d2-d1を実行しようとすると、文字列でマイナス演算子を使用できないため失敗します。2)上記の回答の最初の行を読んだ場合、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
2
schalkneethling

これを試して:

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()
0
user8359392