Pular para o conteúdo principal

String do Python para DateTime: Como converter cadeias de caracteres em objetos DateTime

Aprenda tudo sobre o módulo de data e hora do Python neste guia passo a passo, que aborda a conversão de string em data e hora, exemplos de código e erros comuns.
Actualizado 11 de abr. de 2025  · 8 min de leitura

Em Python, as cadeias de caracteres são um tipo de dados comum usado para representar datas e horas, mas, como cientistas e engenheiros de dados, muitas vezes precisamos converter essas cadeias de caracteres em objetos de data e hora para realizar várias operações, como classificação ou comparação.

A conversão de cadeias de caracteres em objetos de data e hora pode ser complicada, especialmente para os novatos em Python. Portanto, neste artigo, orientarei você nas etapas necessárias para usar esses métodos e fornecerei exemplos de código ao longo do caminho. Quer você seja um desenvolvedor experiente ou esteja apenas começando sua jornada, vamos mergulhar no mundo dos objetos de data e hora em Python!

Para executar facilmente todo o código de exemplo deste tutorial, você pode criar uma pasta de trabalho do DataLab gratuitamente que tenha o Python pré-instalado e contenha todos os exemplos de código. Para que você possa praticar mais a conversão de cadeias de caracteres em objetos de data e hora, confira este exercício prático do DataCamp.

Aprenda Python do zero

Domine o Python para a ciência de dados e adquira habilidades que estão em alta.
Comece a aprender de graça

Introdução ao módulo datetime do Python

O módulo datetime, que vem embutido no Python, pode ser usado sempre que você precisar trabalhar com datas, horas ou intervalos de tempo para qualquer aplicativo criado com Python. Ele oferece classes e métodos convenientes para representar e manipular dados de data e hora.

Tabela 1: Resumo das classes e métodos no módulo datetime

Classe/Método Finalidade Casos de uso comuns
datetime.date Representa uma data (ano, mês, dia). Cálculo de diferenças entre datas, formatação de datas como cadeias de caracteres, extração de componentes de datas.
datetime.time Representa uma hora do dia (hora, minuto, segundo, microssegundo). Comparação de tempos, formatação de tempos como cadeias de caracteres, extração de componentes de tempo.
datetime.datetime Representa uma data e hora. Combina as funcionalidades de data e hora. Trabalho com dados de séries temporais, extração de componentes de data e hora, formatação como cadeias de caracteres.
datetime.timedelta Representa a diferença entre duas datas ou horários (duração). Adição/subtração de durações de/para datas ou horas, cálculo de intervalos de tempo.
datetime.strptime() Analisa uma cadeia de caracteres em um objeto datetime com base em um formato especificado. Conversão de strings em objetos de data e hora para manipulação e análise adicionais.
datetime.strftime() Formata um objeto datetime em uma cadeia de caracteres com base em um formato especificado. Conversão de objetos de data e hora em cadeias de caracteres legíveis por humanos para exibição ou geração de relatórios.

Vamos entender as principais classes desse módulo, pois as converteremos em objetos datetime:

1. datetime.date

Essa classe representa uma data (ano, mês e dia) e fornece métodos para trabalhar com datas, como calcular a diferença entre duas datas e formatar datas como cadeias de caracteres.

Suponha que tenhamos um conjunto de dados contendo os preços diários das ações de uma empresa. Podemos usar a classe date para extrair as datas do conjunto de dados e plotar os preços das ações ao longo do tempo.

Aqui está um snippet que mostra o uso da classe date:

from datetime import date

# create a date object representing March 1, 2023
start_date = date(2023, 3, 1)

# extract information such as the year, month, and day
year = start_date.year
month = start_date.month
day = start_date.day

# get the day of the week (Note: Monday is coded as 0, and Sunday as 6)
weekday = start_date.weekday()

# the date can be formatted as a string if needed
date_str = start_date.strftime('%Y-%m-%d')

2. datetime.time

Essa classe representa uma hora do dia (hora, minuto, segundo e microssegundo) e fornece métodos para trabalhar com horas, como comparação de horas e formatação de horas como cadeias de caracteres.

Digamos que você tenha um conjunto de dados que contenha o horário de término de uma corrida; podemos usar a classe time para extrair as horas e os minutos em que cada competidor terminou a corrida.

from datetime import time

# create a time object with the microsecond granularity
end_time = time(15, 45, 30, 500000)

# get the hour and minute
hour = end_time.hour
minute = end_time.minute
second = end_time.second
microsecond = end_time.microsecond

3. datetime.datetime

Essa classe representa uma data e uma hora e fornece métodos para você trabalhar com ambas. Ele combina a funcionalidade das classes de data e hora.

É comumente usado em tarefas de análise de dados que envolvem dados de séries temporais com alta resolução temporal, como dados por hora ou por minuto. Suponha que tenhamos um conjunto de dados contendo a demanda horária de eletricidade de uma cidade. Podemos usar a classe datetime para extrair a data e a hora do conjunto de dados e plotar a demanda de eletricidade ao longo do tempo.

from datetime import datetime

# create a datetime object representing March 1, 2023 at 9:30 AM
start_datetime = datetime(2023, 3, 1, 9, 30)

# get the year, month, day, hour, and minute
year = start_datetime.year
month = start_datetime.month
day = start_datetime.day
hour = start_datetime.hour
minute = start_datetime.minute

4. datetime.timedelta

Essa classe representa uma duração ou um intervalo de tempo e fornece métodos para trabalhar com intervalos de tempo, como adicionar ou subtrair intervalos de tempo de datas ou horas.

Suponha que tenhamos um conjunto de dados contendo os horários de início e término de um conjunto de eventos e que desejemos calcular a duração total de todos os eventos. Podemos usar a classe timedelta para calcular a duração de cada evento e somá-los.

from datetime import timedelta

# create a timedelta object representing 3 hours and 15 minutes
event_duration = timedelta(hours=3, minutes=15)

# get the total duration in seconds
event_duration_seconds = event_duration.total_seconds()

# add the duration to a start time to get an end time
event_start_time = datetime(2023, 3, 1, 18, 15)
event_end_time = event_start_time + event_duration

Em todos esses casos que mostramos, usamos objetos datetime, mas, na prática, os dados do mundo real geralmente permanecem como uma string. E a conversão para um objeto datetime desbloqueia todas as funcionalidades acima, que são poderosas na análise e nos aplicativos de ciência de dados.

Converter uma string em um objeto datetime em Python usando datetime.strptime()

Em Python, podemos usar o método datetime.strptime() para converter uma string em um objeto datetime. O método strptime() recebe dois argumentos: a string a ser convertida e uma string de formato que especifica o formato da string de entrada.

A string de formato usa uma combinação de códigos de formatação para representar os vários componentes da data e da hora. Aqui estão alguns dos códigos de formatação mais comumente usados:

Tabela 2: Códigos comuns de formatação de data e hora

Código de formato Descrição Exemplo de entrada Exemplo de saída
%Y Ano com 4 dígitos 2023 2023
%y Ano com 2 dígitos 23 23
%m Mês com 2 dígitos (01-12) 03 03
%d Dia do mês com 2 dígitos (01-31) 15 15
%H Hora com 2 dígitos (00-23) 14 14
%I Hora com 2 dígitos (01-12) 02 02
%M Minuto de 2 dígitos (00-59) 45 45
%S Segundo de 2 dígitos (00-59) 30 30
%f Microssegundos (000000-999999) 123456 123456
%p AM ou PM PM PM
%z Deslocamento UTC +0530 +0530
%a Nome abreviado do dia da semana Terça-feira Terça-feira
%A Nome completo do dia da semana Terça-feira Terça-feira
%b Nome abreviado do mês Mar Mar
%B Nome completo do mês Março Março
%j Dia do ano (001-366) 074 074
%U Número da semana do ano (domingo como o primeiro dia) 10 10
%W Número da semana do ano (segunda-feira como o primeiro dia) 09 09

Agora que entendemos as diretivas strptime, o processo de conversão de cadeias de caracteres em objetos de data e hora pode ser simplificado.

  • Etapa 01: Analise a cadeia de data e hora que pode ser convertida em busca de padrões que correspondam aos códigos de formatação.
  • Etapa 02: Crie o formato data-hora a partir das diretivas strptime().
  • Etapa 03: Passe a string e o formato para a função e receba o objeto como saída.

Vamos colocar essas etapas em ação.

Conversão de uma cadeia de caracteres em um formato específico em um objeto de data e hora

from datetime import datetime

# Example with the standard date and time format
date_str = '2023-02-28 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

# Example with a different format

date_str = '02/28/2023 02:30 PM'
date_format = '%m/%d/%Y %I:%M %p'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

No primeiro exemplo, temos uma string que representa uma data e hora no formato 'YYYY-MM-DD HH:MM:SS' e, no segundo exemplo, em um formato diferente, 'MM/DD/YYYYY HH:MM AM/PM'.

Em ambos os casos, depois de especificarmos a string de formato correta como o segundo argumento para strptime(), você receberá o objeto datetime correto.

Conversão de uma string com informações de fuso horário em um objeto datetime

from datetime import datetime

date_str = '2023-02-28 14:30:00+05:30'
date_format = '%Y-%m-%d %H:%M:%S%z'

date_obj = datetime.strptime(date_str, date_format)
print(date_obj)

Neste exemplo, temos uma cadeia de caracteres que representa uma data e uma hora com informações de fuso horário no formato 'YYYY-MM-DD HH:MM:SS+TZOFFSET', em que TZOFFSET é o deslocamento do fuso horário em horas e minutos do UTC. Especificamos a string de formato como o segundo argumento para strptime(), incluindo o código de formatação %z para analisar o deslocamento de fuso horário.

Embora a função que vimos acima possa parecer fácil na teoria, ela também pode ser uma fonte de frustração quando as coisas dão errado na prática.

Analisar datas sem cadeias de formato usando dateutil

Outra opção flexível é a biblioteca dateutil, especialmente a função parser.parse(). Ele detecta automaticamente os formatos de data, permitindo que você analise as cadeias de caracteres sem especificar uma cadeia de formato.

from dateutil.parser import parse

# Automatically infers the format
date_obj = parse("March 1, 2023 9:30 AM")
print(date_obj)

Isso é especialmente útil ao lidar com formatos de data imprevisíveis ou inconsistentes.

Manuseio de fusos horários

Para o tratamento de data e hora com reconhecimento de fuso horário, o Python oferece duas opções populares:

  • pytz (amplamente utilizado e compatível com versões anteriores)

  • zoneinfo (introduzido no Python 3.9, parte da biblioteca padrão)

from datetime import datetime
from zoneinfo import ZoneInfo

# Using zoneinfo
dt = datetime(2023, 3, 1, 9, 30, tzinfo=ZoneInfo("America/New_York"))
print(dt)

# Using pytz (alternative)
import pytz
dt_pytz = datetime(2023, 3, 1, 9, 30, tzinfo=pytz.timezone("America/New_York"))
print(dt_pytz)

Essas ferramentas permitem que você atribua fusos horários, converta entre eles e leve em conta o horário de verão automaticamente.

Considerações sobre o horário de verão

Ao trabalhar com tempos de data com reconhecimento de fuso horário, o horário de verão (DST) pode causar complicações, especialmente quando os relógios avançam ou retrocedem.

Bibliotecas como zoneinfo e pytz gerenciam as transições de horário de verão automaticamente quando você atribui o fuso horário apropriado:

from datetime import datetime
from zoneinfo import ZoneInfo

# Before and after DST starts
before_dst = datetime(2023, 3, 12, 1, 30, tzinfo=ZoneInfo("America/New_York"))
after_dst = datetime(2023, 3, 12, 3, 30, tzinfo=ZoneInfo("America/New_York"))

print(before_dst)
print(after_dst)

Isso garante que os cálculos de data e hora permaneçam precisos durante as mudanças de horário de verão.

Uso do pandas para conversão de data e hora

Embora o módulo datetime integrado do Python seja poderoso, muitos cientistas de dados preferem usar a biblioteca pandas para conversões de data e hora devido à sua simplicidade e capacidade de lidar com colunas inteiras de datas de forma eficiente.

import pandas as pd

# Converting a column of strings to datetime objects
date_series = pd.to_datetime(['2023-02-28', '2023-03-01', '2023-03-02'])
print(date_series)

O Pandas infere automaticamente os formatos e lida com as inconsistências comuns de forma graciosa, o que o torna uma opção ideal para trabalhar com dados tabulares.

Formatação de objetos de data e hora em strings com strftime()

Depois de converter cadeias de caracteres em objetos de data e hora e realizar as operações desejadas, talvez você precise convertê-las novamente em cadeias de caracteres. Você pode usar o site datetime.strftime() para essa finalidade.

from datetime import datetime

now = datetime.now()
formatted = now.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)

Esse método oferece a você controle total sobre como o objeto datetime é exibido em forma de cadeia de caracteres.

Solução de problemas de erros comuns de strptime()

Aqui estão alguns erros comuns que você pode encontrar e como corrigi-los:

ValueError: os dados de hora 'date_string' não correspondem ao formato '%Y-%m-%d %H:%M:%S'

O erro mais comum ocorre quando a string de entrada não corresponde à string de formato. Verifique novamente se a string de entrada e a string de formato correspondem exatamente.

import datetime

# When input has two-digit year instead of four-digit year
date_str = '23-03-01'
date_obj = datetime.datetime.strptime(date_str, '%y-%m-%d')
# Raises ValueError: time data '23-03-01' does not match format '%y-%m-%d'

# When the input has missing leading zeros for hour and minute
time_str = '8:30'
time_obj = datetime.datetime.strptime(time_str, '%H:%M')
# Raises ValueError: time data '8:30' does not match format '%H:%M'

TypeError: o argumento 1 de strptime() deve ser str, não 'int'

O próximo erro comum ocorre quando você passa um número inteiro para datetime.strptime() ou time.strptime() em vez de uma cadeia de caracteres. Certifique-se de que todos os valores que você está passando para a função sejam cadeias de caracteres.

# Example 1: Integer instead of string
date_int = 20230301
date_obj = datetime.datetime.strptime(date_int, '%Y%m%d')
# Raises TypeError: strptime() argument 1 must be str, not int

# Example 2: List instead of string
date_list = [2023, 3, 1]
date_obj = datetime.datetime.strptime(date_list, '%Y-%m-%d')
# Raises TypeError: strptime() argument 1 must be str, not list

ValueError: dados não convertidos permanecem: ':00'

Esse erro ocorre quando há caracteres restantes na cadeia de caracteres de entrada, que não são correspondidos pela cadeia de caracteres de formato. Por exemplo, esse erro ocorrerá se a cadeia de caracteres de formato especificar apenas o ano, o mês e o dia, mas a cadeia de caracteres de entrada também contiver a hora do dia. Para depurar esse erro, verifique se a string de formato corresponde a toda a string de entrada.

# when input string contains time of day
date_str = '2023-03-01 12:30:00'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains:  12:30:00

# When input string contains extra characters
date_str = '2023-03-01T00:00:00Z'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
# Raises ValueError: unconverted data remains: T00:00:00Z

Conclusão

É seguro dizer que o método datetime.strptime() fornece uma maneira flexível e poderosa de converter strings em objetos datetime em Python e pode ser usado para lidar com uma ampla variedade de formatos de data e hora. Por que você não pega a nossa planilha de datas e horários para consulta posterior?

Depois de entender as datas e os horários, a próxima etapa é praticá-los em um projeto. Recomendamos que você escolha uma delas e solidifique seu aprendizado:

Concordamos que os dados de data e hora no mundo real são complicados, mas tudo o que você precisa é entender os formatos e padrões que estão por trás de cada tipo de data e hora que você tem em seus dados e usar as bibliotecas que você tem com sabedoria.

Perguntas frequentes

Como posso lidar com cadeias de caracteres com formatos de data mistos no mesmo conjunto de dados?

Ao trabalhar com conjuntos de dados que incluem formatos de data mistos, você pode usar o módulo dateutil do Python. A função dateutil.parser.parse() é mais flexível do que datetime.strptime(), pois pode detectar e analisar automaticamente uma variedade de formatos de data sem exigir uma string de formato predefinida:

from dateutil.parser import parse

date_str1 = '2023-03-01'
date_str2 = 'March 1, 2023'

date_obj1 = parse(date_str1)
date_obj2 = parse(date_str2)

print(date_obj1)  # Output: 2023-03-01 00:00:00
print(date_obj2)  # Output: 2023-03-01 00:00:00

Posso converter cadeias de caracteres em objetos de data e hora, levando em conta os diferentes fusos horários?

Sim, você pode lidar com fusos horários usando a biblioteca pytz em combinação com datetime. Primeiro, converta a string em um objeto datetime e, em seguida, anexe um fuso horário usando pytz.timezone():

from datetime import datetime
import pytz

date_str = '2023-03-01 14:30:00'
date_format = '%Y-%m-%d %H:%M:%S'
date_obj = datetime.strptime(date_str, date_format)

# Set time zone
timezone = pytz.timezone('US/Eastern')
date_obj_tz = timezone.localize(date_obj)

print(date_obj_tz)  # Output: 2023-03-01 14:30:00-05:00

Qual é a diferença entre datetime.strptime() e datetime.fromisoformat()?

datetime.strptime() permite que você especifique uma cadeia de formato personalizada para analisar formatos de data não padrão ou variados.

datetime.fromisoformat() foi projetado especificamente para analisar cadeias de datas formatadas com ISO 8601 (por exemplo, '2023-03-01T14:30:00'). É mais simples de usar se suas cadeias de caracteres seguirem estritamente o padrão ISO 8601:

from datetime import datetime

iso_date_str = '2023-03-01T14:30:00'
date_obj = datetime.fromisoformat(iso_date_str)
print(date_obj)  # Output: 2023-03-01 14:30:00

Arunn Thevapalan's photo
Author
Arunn Thevapalan
LinkedIn
Twitter

Como cientista de dados sênior, eu projeto, desenvolvo e implanto soluções de aprendizado de máquina em larga escala para ajudar as empresas a tomar melhores decisões baseadas em dados. Como redator de ciência de dados, compartilho aprendizados, conselhos de carreira e tutoriais práticos e detalhados.

Temas

Saiba mais sobre Python

Curso

Time Series Analysis in Python

4 hr
63.7K
In this four-hour course, you’ll learn the basics of analyzing time series data in Python.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

Como aprender Python do zero em 2024: um guia especializado

Descubra como aprender Python, suas aplicações e a demanda por competências em Python. Comece sua jornada em Python hoje mesmo ​com nosso guia detalhado.
Matt Crabtree's photo

Matt Crabtree

15 min

Tutorial

Tutorial de strings em Python

Neste tutorial, você aprenderá tudo sobre as cadeias de caracteres do Python: fatiamento e encadeamento, manipulação e formatação com a classe Formatter, cadeias de caracteres f, modelos e muito mais!
Sejal Jaiswal's photo

Sejal Jaiswal

10 min

Tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

Tutorial

Tutorial do Python pandas: O guia definitivo para iniciantes

Você está pronto para começar sua jornada com os pandas? Aqui está um guia passo a passo sobre como você pode começar.
Vidhi Chugh's photo

Vidhi Chugh

15 min

Tutorial

Formatação de f-string em Python

Saiba mais sobre a técnica de formatação f-string no Python 3.6. Neste tutorial, você verá as vantagens que ele oferece e verá alguns exemplos de casos de uso.
Hafeezul Kareem Shaik's photo

Hafeezul Kareem Shaik

5 min

Tutorial

Conversão de tipo de dados Python: Um guia com exemplos

Neste tutorial de Python, você abordará a conversão implícita e explícita de tipos de dados de estruturas de dados primitivas e não primitivas com a ajuda de exemplos de código!
Sejal Jaiswal's photo

Sejal Jaiswal

14 min

Ver maisVer mais