Pythonの2つの日付の違い


137

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になります。



addonDays関数はDST日に失敗することに注意してください。
16

あなたが正しいです。すでに機能を変更しています。3600(1時間)を追加すると機能します。
mauguerra

回答:


270

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

37
すばらしい答えです。明確にするために、結果はオブジェクトに(d2 - d1)なりtimedeltaます。
aganders3

コンソールにこのエラーがあります:タイプオブジェクト 'datetime.datetime'に属性 'strptime'がありません
mauguerra

2
TypeErrorが発生します:timedeltaオブジェクトで.days()を実行しようとすると、 'int'オブジェクトを呼び出すことができません。また、ドキュメントではそれについて言及していません(docs.python.org/2/library/datetime.html)。
user1761806

4
についてtotal_secondsも教えていただけますか?secondsドキュメントを読まないで試したときに得られるはずだったので、重要だと思います。
マーティントーマ2017

1
@ThejKiran d2とd1を正確に1日離して、期待どおりかどうか確認してください;-)
Martin Thoma

27

別の短い解決策:

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

3
関数if内はdiff_dates完全に不要ではないですか?絶対値の定義により、abs(date1-date2)常にに等しくなりabs(date2-date1)ます。
Blckknght 2014年

少なくとも、Python3.5でprint文は次のようになります( '{}と{}の間に{}日'形式(結果1、D1、D2))プリント
Ernestas Kardzys

2

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

1)そのままのコードは、mauguerraによって言及されたエラーをスローします2)コードを次のように変更した場合:

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

これはあなたのdatetimeオブジェクトを文字列に変換しますが、2つのこと

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

1
私のコードはdatetime.strptime文字列をdatetimeオブジェクトに変換するために使用します。OPが「日付の形式はYYYY-MM-DDである」と述べているので、日付は文字列として表されると想定しました。そうでない場合、明らかに変換の必要はありません。
Fred Foo

0

これを試して:

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

-4

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.