Pular para o conteúdo principal
InicioTutoriaisPython

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

No tutorial, você aprenderá tudo sobre o módulo datetime do Python. Encontre um guia passo a passo para a conversão de strings em datetime, juntamente com exemplos de código e erros comuns.
Actualizado 11 de set. de 2024  · 9 min leer

Você quer ir direto ao ponto e entender a codificação de data e hora? 

Os dados de data e hora são um componente essencial de muitos aplicativos de software, e lidar com eles de forma eficaz é uma habilidade crucial para os desenvolvedores. No 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 quem está começando a usar Python. Portanto, neste artigo, examinaremos as etapas necessárias para usar esses métodos e forneceremos 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 todos os exemplos de código deste tutorial, você pode criar gratuitamente uma pasta de trabalho do DataLab que tenha o Python pré-instalado e contenha todos os exemplos de código. Para 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

Uma introdução cuidadosa 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.

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 um horário do dia (hora, minuto, segundo e microssegundo) e fornece métodos para trabalhar com horários, como comparação de horários e formatação de horários 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 representar 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 de data e hora, mas, na prática, os dados do mundo real geralmente permanecem como uma string. E a conversão para um objeto de data e hora desbloqueia todas as funcionalidades acima, que são poderosas na análise e nos aplicativos de ciência de dados.

Aumente a proficiência em Python da sua equipe

Treine sua equipe em Python com o DataCamp for Business. Treinamento abrangente, projetos práticos e métricas de desempenho detalhadas para sua empresa.

Solicite Uma Demonstração Hoje Mesmo!
homepage-hero.png

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:

  • %Y: Ano com 4 dígitos
  • %y: Ano com 2 dígitos
  • %m: Mês com 2 dígitos (01-12)
  • %d: Dia do mês com 2 dígitos (01-31)
  • %H: Hora com 2 dígitos (00-23)
  • %M: Minuto de 2 dígitos (00-59)
  • %S: Segundo de 2 dígitos (00-59)

Agora que entendemos as diretivas strptime, o processo de conversão de strings 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 cadeia de caracteres 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 hora com informações de fuso horário no formato 'YYYY-MM-DD HH:MM:SS+TZOFFSET', em que TZOFFSET é o deslocamento de 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.

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 string de entrada, que não são correspondidos pela string 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() oferece uma maneira flexível e eficiente de converter cadeias de caracteres em objetos datetime no 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 possui com sabedoria.

Obtenha a certificação para a função de cientista de dados dos seus sonhos

Nossos programas de certificação ajudam você a se destacar e a provar que suas habilidades estão prontas para o trabalho para possíveis empregadores.

Timeline mobile.png
Temas

Saiba mais sobre Python

Certificação disponível

Course

Análise de séries temporais em Python

4 hr
60K
Neste curso de quatro horas, você aprenderá os fundamentos da análise de dados de séries temporais em Python.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

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

16 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

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

Tutorial de conversão de tipos de dados do Python

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

13 min

tutorial

Tutorial de docstrings em Python

Saiba mais sobre os Docstrings do Python. Encontre diferentes exemplos e tipos de formatos de docstrings para Sphinx, Numpy e Pydoc.
Aditya Sharma's photo

Aditya Sharma

15 min

tutorial

Como aparar uma cadeia de caracteres em Python: Três métodos diferentes

Aprenda os fundamentos do corte de caracteres à esquerda e à direita de uma string em Python.
Adel Nehme's photo

Adel Nehme

5 min

See MoreSee More