Subtrair data/hora em Python
Este tutorial irá introduzir como realizar a subtracção de data/hora em Python.
Iremos explorar diferentes resultados após a subtracção, como a produção do número de segundos, minutos, horas, ou anos da diferença dos dois objectos de data/hora fornecidos.
Utilizar o módulo datetime
para subtrair datetime em Python
datetime
é um módulo em Python que suportará funções que manipulam o objecto datetime
.
A inicialização de um objecto datetime
toma três parâmetros necessários como datetime.datetime(year, month, day)
. Também aceita parâmetros opcionais sob a forma de horas, minutos, segundos, microssegundos, e fuso horário.
O datetime
também tem a função now()
, que inicializa a data e a hora actuais no objecto.
A subtracção de dois objectos de data/hora devolverá a diferença do número de dias, e a diferença no tempo, se houver alguma.
from datetime import datetime
then = datetime(1987, 12, 30, 17, 50, 14) # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)
print(now - then)
Resultado:
12055 days, 5:10:00
O resultado significa que as duas datas são 12055 dias e 5 horas e 10 minutos de intervalo.
Para converter este resultado em formatos diferentes, teríamos primeiro de converter a timedelta
em segundos. O objecto datetime tem um método incorporado datetime.total_seconds()
convertendo o objecto no total de segundos que contém.
Aqui está o código-fonte completo para a subtracção do datetime utilizando o módulo datetime
e as suas funções.
from datetime import datetime
def getDifference(then, now=datetime.now(), interval="secs"):
duration = now - then
duration_in_s = duration.total_seconds()
# Date and Time constants
yr_ct = 365 * 24 * 60 * 60 # 31536000
day_ct = 24 * 60 * 60 # 86400
hour_ct = 60 * 60 # 3600
minute_ct = 60
def yrs():
return divmod(duration_in_s, yr_ct)[0]
def days():
return divmod(duration_in_s, day_ct)[0]
def hrs():
return divmod(duration_in_s, hour_ct)[0]
def mins():
return divmod(duration_in_s, minute_ct)[0]
def secs():
return duration_in_s
return {
"yrs": int(yrs()),
"days": int(days()),
"hrs": int(hrs()),
"mins": int(mins()),
"secs": int(secs()),
}[interval]
then = datetime(1987, 12, 30, 17, 50, 14) # yr, mo, day, hr, min, sec
now = datetime(2020, 12, 25, 23, 13, 0)
print("The difference in seconds:", getDifference(then, now, "secs"))
print("The difference in minutes:", getDifference(then, now, "mins"))
print("The difference in hours:", getDifference(then, now, "hrs"))
print("The difference in days:", getDifference(then, now, "days"))
print("The difference in years:", getDifference(then, now, "yrs"))
A primeira coisa que o código faz é inicializar 2 datas separadas para a subtracção e chamar a função várias vezes com saídas diferentes de cada vez. No caso de all
, devolverá uma saída que obtém a diferença com base em todos os casos de anos a segundos.
A função divmod()
aceita dois números como dividendo e divisor e devolve um tuple do quociente e o restante entre eles. Apenas o quociente é necessário, e é por isso que apenas o índice 0
é utilizado através do código.
Resultado:
The difference in seconds: 1041052966
The difference in minutes: 17350882
The difference in hours: 289181
The difference in days: 12049
The difference in years: 33
Agora temos a diferença entre dois objectos de data e hora dentro de vários períodos de tempo diferentes.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn