Se eu tiver duas datas (ex. '8/18/2008'
E '9/26/2008'
), qual é a melhor maneira de obter o número de dias entre essas duas datas?
507
Se você tiver dois objetos de data, basta subtraí-los, o que computa um timedelta
objeto.
from datetime import date
d0 = date(2008, 8, 18)
d1 = date(2008, 9, 26)
delta = d1 - d0
print(delta.days)
A seção relevante dos documentos: https://docs.python.org/library/datetime.html .
Veja esta resposta para outro exemplo.
np.datetime64
parapython datetime
stackoverflow.com/questions/52982056/...Usando o poder da data e hora:
fonte
date
ainda falta o seu equivalentestrptime()
.strptime
doformat
argumento? Deve ficar claro com a primeira data do argumento que tem um formato.Dias até o Natal:
Mais aritmética aqui .
fonte
Você deseja o módulo datetime.
Outro exemplo:
Como apontado aqui
fonte
delta = today - last_year
print(delta.days)
fonte
abs()
, o que é útil quando as datas comparadas são desconhecidas anteriormente e é a diferença na qual você está interessado. Se a sua segunda datadatetime.strptime(date, date)
for posterior à primeira, o resultado será negativo.abs()
torna toda a entrada absoluta (isto é, positiva).Também pode ser feito facilmente com
arrow
:Para referência: http://arrow.readthedocs.io/en/latest/
fonte
sem usar Lib apenas código puro:
fonte
todos responderam excelentemente usando a data, deixe-me tentar responder usando pandas
Isso dará a resposta. Caso uma das entradas seja a coluna dataframe. basta usar dt.days no lugar de dias
fonte
Há também um
datetime.toordinal()
método que não foi mencionado ainda:https://docs.python.org/3/library/datetime.html#datetime.date.toordinal
Parece bem adequado para calcular a diferença de dias, embora não seja tão legível quanto
timedelta.days
.fonte
(d1 - d0).days
retorna0
,d1.toordinal() - d0.toordinal()
retorna1
. Depende do que você precisa no seu caso de uso real.Para calcular datas e horas, existem várias opções, mas escreverei da maneira mais simples:
Espero que ajude
fonte
Isso pressupõe, é claro, que você já tenha verificado que suas datas estão no formato
r'\d+/\d+/\d+'
.fonte
map(int, s.split('/'))
. Não é exatamente inovador, mas, novamente, essa questão é bastante estúpida. Minha resposta mostra apenas outra maneira de esfolar o gato.Aqui estão três maneiras de resolver esse problema:
fonte