Verschil tussen twee datums in Python

Ik heb twee verschillende datums en ik wil het verschil in dagen ertussen weten. Het formaat van de datum is JJJJ-MM-DD.

Ik heb een functie die een bepaald getal kan TOEVOEGEN of AFTREKKEN bij een datum:

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

waarbij A de datum is en x het aantal dagen dat ik wil toevoegen. En het resultaat is een nieuwe datum.

Ik heb een functie nodig waar ik twee datums kan geven en het resultaat zou een int zijn met een datumverschil in dagen.


Antwoord 1, autoriteit 100%

Gebruik -om het verschil tussen twee datetime-objecten te krijgen en neem het days-lid.

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)

Antwoord 2, autoriteit 10%

Nog een korte oplossing:

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

Antwoord 3

Ik heb de code geprobeerd die hierboven door larsmans is gepost, maar er zijn een paar problemen:

1) De code zoals deze is, zal de fout veroorzaken zoals vermeld door mauguerra
2) Als u de code in het volgende verandert:

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

Hiermee wordt uw DateTime-objecten omgezet naar snaren, maar twee dingen

1) Proberen om D2 – D1 te doen, zal falen omdat u de min-operator op snaren niet kunt gebruiken
2) Als u de eerste regel van het bovenstaande antwoord leest, vermeldt u, wilt u de – operator op twee datetime-objecten gebruiken, maar u hebt ze gewoon geconverteerd naar strings

Wat ik heb gevonden, is dat u letterlijk alleen het volgende nodig hebt:

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

Antwoord 4

Probeer dit:

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

Antwoord 5

U kunt de third-Party Library dateutil, een extensie voor de ingebouwde datetime.

DATA DATA MET DE parsermodule is erg eenvoudig:

from dateutil import parser
date1 = parser.parse('2019-08-01')
date2 = parser.parse('2019-08-20')
diff = date2 - date1
print(diff)
print(diff.days)

Antwoord op basis van die van Dit verwijderde dubbele


Antwoord 6

Ik heb een paar codes geprobeerd, maar uiteindelijk iets gebruiken als simpel als (in Python 3):

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

Als uw Start_Datetime en end_datetime kolommen zijn in datetime64[ns]formaat, DATETIME begrijpt het en keert u terug en ga terug Het verschil in dagen + tijdstempel, dat is in timedelta64[ns]formaat.

Als u alleen het verschil in dagen wilt zien, kunt u alleen de Datum scheiden van het deel Start_Datetime en End_DatTime met behulp van (werkt ook voor de tijd gedeelte):

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

en vervolgens uitvoeren:

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

Antwoord 7

PD.DATE_RANGE (‘2019-01-01’, ‘2019-02-01’). Vorm [0]

Other episodes