Manipulando data e hora em Python com datetime
Conheça o módulo datetime e domine os objetos date, time, datetime e timedelta. Além disso, você aprenderá a converter data e hora em string e vice-versa além de aprender a lidar com fuso horário.
O módulo datetime
do Python
serve para trabalhar com datas e horas.
Inicialmente faremos alguns programas simples e depois iremos nos aprofundando.
Hora e data atual do sistema
Para exibir a hora atual do seu sistema basta fazer da seguinte forma:
import datetime
hora_atual = datetime.datetime.now()
print(hora_atual)
Na primeira linha importamos o módulo datetime
.
Em seguida, usamos o método now()
da classe datetime
contida no módulo datetime
para criar um objeto datetime
contendo a data e hora atual.
Ao executar o programa, a saída será algo como:
2022-01-22 17:17:47.656306
Data atual do sistema
Para exibir apenas a data podemos utilizar o método today()
definido na classe date
para obter um objeto date
contendo a data atual.
import datetime
data_atual = datetime.date.today()
print(data_atual)
Ao executar o programa, a saída será algo como:
2022-01-22
classe datetime.date()
Você pode instanciar um objeto date
da classe date
.
Um objeto da classe date
representa uma data(ano, mês e dia).
Objeto date representando uma data
import datetime
data = datetime.date(2022, 3, 20)
print(data)
Ao executar o programa, a saída será:
2022-03-20
No exemplo acima, date()
é um construtor da classe date
.
O construtor recebe três argumentos: ano, mês e dia.
A variável data
é um objeto date
.
Podemos importar a classe date
do módulo datetime
. Veja como:
from datetime import date
data = date(2022, 3, 20)
print(data)
Obtendo a data de um timestamp
Também podemos criar objetos date
a partir de um timestamp
.
Um timestamp Unix
é o número de segundos entre uma data específica e 1.º de janeiro de 1970 em UTC.
Você pode converter um timestamp
de data/hora em data usando o método fromtimestamp()
.
from datetime import date
data = date.fromtimestamp(1647794364)
print(data)
Ao executar o programa, a saída será:
2022-03-20
Exiba o ano, mês e dia de hoje
Podemos obter ano, mês, dia, dia da semana, etc. do objeto de data facilmente. Veja como:
from datetime import date
data = date.today()
print("Ano atual:", data.year)
print("Mês atual:", data.month)
print("Dia atual:", data.day)
Ao executar o programa, a saída será algo como:
Ano atual: 2022
Mês atual: 1
Dia atual: 22
datetime.hour()
Um objeto hour
da classe time
representa a hora local.
Objeto time para representar o tempo
from datetime import time
# time(hora=0, minuto=0, segundo=0)
a = time()
print("a =", a)
# time(hora, minuto e segundo)
b = time(20, 30, 0)
print("b =", b)
# time(hora, minuto e segundo)
c = time(hour=21, minute=31, second=11)
print("c =", c)
# time(hora, minuto, segundo e microsegundo)
d = time(21, 31, 1, 123640)
print("d =", d)
Ao executar o programa, a saída será:
a = 00:00:00
b = 20:30:00
c = 21:31:11
d = 21:31:01.123640
Exibir hora, minuto, segundo e microssegundo
Após criar um objeto time
, você pode imprimir facilmente seus atributos, como hora, minuto, etc.
from datetime import time
a = time(12, 30, 0)
print("Hora =", a.hour)
print("Minuto =", a.minute)
print("Segundo =", a.second)
print("Microssegundo =", a.microsecond)
Ao executar o exemplo, a saída será:
Hora = 12
Minuto = 30
Segundo = 0
Microssegundo = 0
Observe que não passamos o argumento microssegundo. Portanto, seu valor padrão 0
é impresso.
datetime.datetime
O módulo datetime
tem uma classe chamada datetime
que pode conter informações de objetos de data e hora.
Objeto datetime do Python
from datetime import datetime
# datetime(ano, mês, dia)
a = datetime(2022, 3, 20)
print(a)
# datetime(ano, mês, dia, hora, minuto, segundo, microsegundo)
b = datetime(2022, 3, 20, 12, 30, 30, 100000)
print(b)
Ao executar o programa, a saída será:
2022-03-20 00:00:00
2022-03-20 12:30:30.100000
Os três primeiros argumentos ano, mês e dia no construtor datetime()
são obrigatórios.
Exibir ano, mês, hora, minuto e timestamp
from datetime import datetime
a = datetime(2022, 3, 20, 12, 30, 30, 100000)
print("Ano =", a.year)
print("Mês =", a.month)
print("Hora =", a.hour)
print("Minuto =", a.minute)
print("Timestamp =", a.timestamp())
Ao executar o programa, a saída será:
Ano = 2022
Mês = 3
Hora = 12
Minuto = 30
Timestamp = 1647790230.1
datetime.timedelta
Um objeto timedelta
representa a diferença entre duas datas ou horas.
Diferença entre duas datas e horas
from datetime import datetime, date
t1 = date(year=2022, month=1, day=22)
t2 = date(year=2002, month=3, day=20)
t3 = t1 - t2
print("t3 =", t3)
t4 = datetime(year=2022, month=1, day=22, hour=12, minute=30, second=30)
t5 = datetime(year=2002, month=3, day=20, hour=9, minute=50, second=45)
t6 = t4 - t5
print("t6 =", t6)
print("Tipo de t3 =", type(t3))
print("Tipo de t6 =", type(t6))
Ao executar o programa, a saída será:
t3 = 7248 days, 0:00:00
t6 = 7248 days, 2:39:45
Tipo de t3 = <class 'datetime.timedelta'>
Tipo de t6 = <class 'datetime.timedelta'>
Observe, ambos t3
e t6
são do tipo <class 'datetime.timedelta'>
.
Diferença entre dois objetos timedelta
from datetime import timedelta
t1 = timedelta(weeks=2, days=5, hours=1, seconds=33)
t2 = timedelta(days=4, hours=11, minutes=4, seconds=54)
t3 = t1 - t2
print("t3 =", t3)
Ao executar o programa, a saída será:
t3 = 14 days, 13:55:39
Aqui, criamos dois objetos timedelta
, t1
e t2
, e sua diferença é impressa na tela.
Exibindo objeto timedelta negativo
from datetime import timedelta
t1 = timedelta(seconds=33)
t2 = timedelta(seconds=4)
t3 = t1 - t2
print("t3 =", t3)
print("t3 =", abs(t3))
Ao executar o programa, a saída será:
t3 = 0:00:29
t3 = 0:00:29
Duração de um objeto timedelta em segundos
Você pode obter o número total de segundos em um objeto timedelta
usando o método total_seconds()
.
from datetime import timedelta
t = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("Segundos totais =", t.total_seconds())
Ao executar o programa, a saída será:
Segundos totais = 435633.233423
Você também pode encontrar a soma de duas datas e horas usando o operador +
.
Além disso, você pode multiplicar e dividir um objeto timedelta
por inteiros e floats.
formatação do datetime em Python
Como a data e a hora são representadas pode diferir em diferentes lugares, organizações, etc.
É mais comum usar mm/dd/yyyy
nos EUA, enquanto dd/mm/yyyy
é mais comum no Brasil.
Python tem os métodos strftime()
e strptime()
para lidar com isso.
Python strftime() - objeto datetime para string
O método strftime()
é definido na classe date
.
O método cria uma string
formatada a partir de um determinado objeto datetime
, time
, date
, datetime
ou time
.
Formatar data usando strftime()
from datetime import datetime
# Data e hora atual
atual = datetime.now()
t = atual.strftime("%H:%M:%S")
print("Hora:", t)
s1 = atual.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S
print("s1:", s1)
s2 = atual.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S
print("s2:", s2)
Ao executar o programa, a saída será algo como:
Hora: 17:54:16
s1: 01/22/2022, 17:54:16
s2: 22/01/2022, 17:54:16
Aqui, %Y
, %m
, %d
, %H
são códigos de formato.
O método strftime()
recebe um ou mais códigos de formato e retorna uma string
formatada com base nele.
No programa acima, t, s1 e s2 são strings
.
%Y
- ano [0001,..., 2018, 2019,..., 9999]%m
- mês [01, 02, ..., 11, 12]%d
- dia [01, 02, ..., 30, 31]%H
- hora [00, 01, ..., 22, 23%M
- minuto [00, 01, ..., 58, 59]%S
- segundo [00, 01, ..., 58, 59]
Python strptime() - string para datetime
O método strptime()
cria um objeto datetime
a partir de uma determinada string (representando data e hora).
strptime()
from datetime import datetime
string = "21 June, 2018"
print("string =", string)
data = datetime.strptime(string, "%d %B, %Y")
print("Data =", data)
Ao executar o programa, a saída será:
string = 21 June, 2018
Data = 2018-06-21 00:00:00
O método strptime()
recebe dois argumentos:
- uma string representando data e hora
- código de formato equivalente ao primeiro argumento
A propósito, %d
, %B
e %Y
são códigos de formato usados para dia, mês(nome completo) e ano respectivamente.
Manipulando o fuso horário em Python
Suponha que você esteja trabalhando em um projeto e precise exibir a data e a hora com base no fuso horário.
Em vez de tentar lidar com o fuso horário por conta própria, sugerimos que você use um módulo chamado pytZ.
from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone('America/New_York')
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_Brasilia = pytz.timezone('Brazil/West')
datetime_Brasilia = datetime.now(tz_Brasilia)
print("Brasília:", datetime_Brasilia.strftime("%m/%d/%Y, %H:%M:%S"))
Ao executar o programa, a saída será algo como:
Local: 01/22/2022, 18:01:11
NY: 01/22/2022, 16:01:11
Brasília: 01/22/2022, 17:01:11