Módulo Python Datetime

O módulo Datetime permite-nos trabalhar com objetos de data e hora. Ele fornece três tipos de dados adicionais: date, time e datetime.

import datetime

date()

datetime.date(year: int, month: int, day: int)

O método date retorna um objeto date com os atributos year, month e day:

from datetime import date
# Criar um objeto date
obj = date(2022, 12, 1)
# Acessar o atributo year
obj.year
2022
obj.month
12
obj.day
1

time()

datetime.time(hour: int, minute: int, second: int)

O método time retorna um objeto time com os atributos hour, minute, second, microsecond e tzinfo:

from datetime import time
# Criar um objeto time
obj = time(10, 20, 33)
# Acessar o atributo hour
obj.hour
10
obj.second
33
obj.microsecond
0

datetime()

datetime.datetime(year, month, day, hour, minute, second)

O datetime retorna um objeto com atributos de objetos date e time:

from datetime import datetime
# Criar um objeto datetime com data e hora
obj = datetime(2024, 12, 1, 15, 35, 59)
# Acessar o atributo year
obj.year
2024
obj.month
12
obj.day
1
obj.hour
15
obj.second
59

now() e today()

Os métodos now e today retornam um objeto datetime com o dia e a hora exatos do sistema:

from datetime import datetime
# Obter data e hora atuais
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 19, 56, 49, 589806)

Como o objeto retornado é um datetime, podemos acessar os atributos date e time:

now.date()
datetime.date(2022, 7, 23)
now.time()
datetime.time(19, 56, 49, 589806)
now.year
2022
now.month
7
now.day
23
now.hour
19
now.minute
56
now.second
49
now.microsecond
589806

Além disso, now pode aceitar um objeto timezone como um parâmetro opcional:

from datetime import datetime, timezone
# Obter a hora UTC atual
datetime.now(timezone.utc)
datetime.datetime(2022, 7, 24, 0, 20, 8, 265634, tzinfo=datetime.timezone.utc)

Se um parâmetro timezone não for especificado, now usará o fuso horário do sistema como padrão.

strftime() e strptime()

Você pode facilmente transformar entre strings e objetos datetime com os métodos strftime e strptime.

strftime()

strftime permite-nos criar strings formatadas de forma legível a partir de um objeto datetime do Python:

from datetime import datetime
# Obter a data e hora atuais para exemplos de formatação
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 20, 31, 19, 751479)
# Formatar datetime como dia-mês-ano com mês abreviado
now.strftime("%d-%b-%Y")
'23-Jul-2022'
# Formatar datetime como dia-mês-ano com mês numérico
now.strftime("%d-%m-%Y")
'23-07-2022'
# Formatar datetime como mês/dia/ano
now.strftime("%m/%d/%Y")
'07/23/2022'
# Formatar datetime com data e hora
now.strftime("%b/%d/%Y - %H:%M:%S")
'Jul/23/2022 - 20:31:19'

Você pode achar as strings passadas para strftime um pouco estranhas, mas é bem fácil entender o seu significado. Por exemplo, %m/%d/%Y retornará o mês, o dia e o ano separados por / (07/23/2022).

strptime()

O método strptime cria um objeto datetime a partir de uma string.

Este método aceita dois parâmetros:

obj.strptime(datetime_string, format)
  • Uma string representando um objeto datetime.
  • O código de formato python equivalente a essa string.
from datetime import datetime

# Analisar string para objeto datetime
datetime_str = '12-Jul-2023'
datetime.strptime(datetime_str, '%d-%b-%Y')
datetime.datetime(2023, 7, 12, 0, 0)
# Analisar string com data e hora
datetime_str = 'Jul/12/2023 - 14:38:37'
datetime.strptime(datetime_str, "%b/%d/%Y - %H:%M:%S")
datetime.datetime(2023, 7, 12, 14, 38, 37)

Códigos de Formato

DiretivaSignificadoExemplo
%aDia da semana como nome abreviado da localidade.Dom, Seg, …, Sáb (pt_BR)
%ADia da semana como nome completo da localidade.Domingo, Segunda-feira, …, Sábado (pt_BR)
%wDia da semana como um número decimal, onde 0 é Domingo e 6 é Sábado.0, 1, …, 6
%dDia do mês como um número decimal preenchido com zero.01, 02, …, 31
%bMês como nome abreviado da localidade.Jan, Fev, …, Dez (pt_BR)
%BMês como nome completo da localidade.Janeiro, Fevereiro, …, Dezembro (pt_BR)
%mMês como um número decimal preenchido com zero.01, 02, …, 12
%yAno sem século como um número decimal preenchido com zero.00, 01, …, 99
%YAno com século como um número decimal.0001, 0002, …, 2013, 2014, …, 9998, 9999
%HHora (relógio de 24 horas) como um número decimal preenchido com zero.00, 01, …, 23
%IHora (relógio de 12 horas) como um número decimal preenchido com zero.01, 02, …, 12
%pEquivalente local de AM ou PM.AM, PM (en_US)
%MMinuto como um número decimal preenchido com zero.00, 01, …, 59
%SSegundo como um número decimal preenchido com zero.00, 01, …, 59
%fMicrossegundo como um número decimal, preenchido à esquerda com zero.000000, 000001, …, 999999
%zDeslocamento UTC na forma ±HHMM[SS[.ffffff]] (string vazia se o objeto for ingênuo).(vazio), +0000, -0400, +1030, +063415, -030712.345216
%ZNome do fuso horário (string vazia se o objeto for ingênuo).(vazio), UTC, GMT
%jDia do ano como um número decimal preenchido com zero.001, 002, …, 366
%UNúmero da semana do ano (Domingo como o primeiro dia da semana) como um número decimal preenchido com zero. Todos os dias em um novo ano precedendo o primeiro Domingo são considerados na semana 0.00, 01, …, 53
%WNúmero da semana do ano (Segunda-feira como o primeiro dia da semana) como um número decimal. Todos os dias em um novo ano precedendo a primeira Segunda-feira são considerados na semana 0.00, 01, …, 53
%cRepresentação de data e hora apropriada da localidade.Ter Ago 16 21:30:00 1988 (en_US)
%xRepresentação de data apropriada da localidade.08/16/88 (None)
%XRepresentação de hora apropriada da localidade.21:30:00 (en_US)
%%Um caractere '%' literal.%

timedelta()

O objeto timedelta representa a diferença entre duas datas ou horas.

from datetime import datetime

# Criar dois objetos datetime
date_1 = datetime.strptime('12-Jul-2023', '%d-%b-%Y')
date_2 = datetime.strptime('01-Jan-2024', '%d-%b-%Y')

# Calcular a diferença (retorna timedelta)
difference = date_2 - date_1
difference
datetime.timedelta(days=173)
# Obter o número de dias do timedelta
difference.days
173

timedelta pode adicionar days, seconds e microseconds a um objeto datetime:

from datetime import datetime, timedelta

# Obter a data e hora atuais para exemplos de timedelta
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Adicionar 10 dias e 15 segundos à data e hora atuais
now + timedelta(days=10, seconds=15)
datetime.datetime(2022, 8, 2, 21, 25, 17, 341081)

E pode subtrair days, seconds e microseconds de um objeto datetime:

from datetime import datetime, timedelta

# Obter a data e hora atuais para exemplo de subtração
now = datetime.now()
now
datetime.datetime(2022, 7, 23, 21, 25, 2, 341081)
# Subtrair 10 dias e 15 segundos da data e hora atuais
now - timedelta(days=10, seconds=15)
datetime.datetime(2022, 7, 13, 21, 59, 41, 100883)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.