Eu tenho uma lista enorme de datas e horários como este:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Vou colocá-los de volta nos campos de data e hora apropriados em um banco de dados, então eu preciso incluí-los em objetos de data e hora reais.
Isso está passando pelo ORM do Django, então não posso usar o SQL para fazer a conversão na inserção.
strptime()
vai deixá-lo louco, a menos que você o enrole. Veja minha resposta, com base na resposta da Or Weis a istoRespostas:
datetime.strptime
é a principal rotina para analisar seqüências de caracteres em tempos de data. Ele pode lidar com todos os tipos de formatos, com o formato determinado por uma string de formato fornecida:O
datetime
objeto resultante é ingênuo ao fuso horário.Ligações:
Documentação do Python para
strptime
: Python 2 , Python 3Documentação do Python para
strptime
/strftime
format strings: Python 2 , Python 3strftime.org também é uma referência muito boa para strftime
Notas:
strptime
= "tempo de análise da string"strftime
= "hora do formato da string"fonte
date
, em vez de umdatetime
, passandodatetime
lida com isso muito bem:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
objeto com reconhecimento de fuso horário adicionando esta linha no Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
"%Y-%m-%d %H:%M:%S"
from datetime import datetime
vez de apenasimport datetime
.Use a biblioteca dateutil de terceiros :
Ele pode lidar com a maioria dos formatos de data, incluindo o que você precisa analisar. É mais conveniente do
strptime
que pode imaginar o formato correto na maioria das vezes.É muito útil para escrever testes, onde a legibilidade é mais importante que o desempenho.
Você pode instalá-lo com:
fonte
Confira o tempo de execução no módulo de tempo . É o inverso do tempo de strft .
fonte
Eu montei um projeto que pode converter algumas expressões realmente legais. Confira timestring .
Aqui estão alguns exemplos abaixo:
pip install timestring
fonte
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
Esta biblioteca tornou TÃO FÁCIL! Obrigado.2017-02-01
. O mesmo para 5 / fev / 2017 (no entanto, fev / 5/2017 corretamente); nenhum dos dois últimos são formatos que eu já vi acostumados com o meu conhecimento, mas pensei em apontar isso de qualquer maneira.Date("20180912")
alguma forma analisa um valor de2018-11-21
. Use por sua conta e risco.Lembre-se disso e você não precisou se confundir na conversão de data e hora novamente.
String para objeto datetime =
strptime
objeto datetime para outros formatos =
strftime
Jun 1 2005 1:33PM
é igual a
%b %d %Y %I:%M%p
então você precisa de tempo de atividade, ou seja, a conversão
string
paraResultado
E se você tiver um formato diferente de datas, poderá usar panda ou dateutil.parse
Resultado
fonte
%b
interrompido se você analisar uma data em inglês em uma máquina que não possui um código de idioma em inglês?No Python> = 3.7.0,
para converter a seqüência AAAA-MM-DD em objeto de data e hora ,
datetime.fromisoformat
pode ser usado.fonte
Muitos carimbos de hora têm um fuso horário implícito. Para garantir que seu código funcione em todos os fusos horários, você deve usar o UTC internamente e anexar um fuso horário sempre que um objeto estranho entrar no sistema.
Python 3.2 ou superior:
fonte
mktime()
1º método feio e às vezes errado ( durante as transições de horário de verão) se conhece o 2º método (datetime.strptime()
)? Se você quiser evitar uma exceção durante um segundo bissexto (o segundo método falhar), poderá usarcalendar.timegm
:(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
Aqui estão duas soluções usando o Pandas para converter datas formatadas como seqüências de caracteres em objetos datetime.date.
Horários
E aqui está como converter os exemplos de data e hora originais do OP:
Existem muitas opções para converter as seqüências de caracteres em carimbos de data / hora do Pandas
to_datetime
, portanto verifique os documentos se precisar de algo especial.Da mesma forma, os carimbos de data e hora têm muitas propriedades e métodos que podem ser acessados, além de
.date
fonte
Pessoalmente, gosto da solução usando o
parser
módulo, que é a segunda resposta a esta pergunta e é bonito, pois você não precisa construir nenhum literal de string para fazê-lo funcionar. MAS , uma desvantagem é que é 90% mais lenta que a resposta aceitastrptime
.Contanto que você não faça isso um milhão de vezes sem parar, ainda acho que o
parser
método é mais conveniente e manipulará a maioria dos formatos de hora automaticamente.fonte
Algo que não é mencionado aqui e é útil: adicionar um sufixo ao dia. Decotei a lógica do sufixo para que você possa usá-lo para qualquer número que desejar, não apenas para datas.
fonte
fonte
Exemplo de objeto de data e hora do Django Timezone.
Essa conversão é muito importante para Django e Python quando você tem
USE_TZ = True
:fonte
Crie uma pequena função utilitária como:
Isso é bastante versátil:
fonte
format
é uma palavra reservada em python e não deve ser usada como um nome de variável.Seria útil para converter string em data e hora e também com fuso horário
fonte
A seta oferece muitas funções úteis para datas e horas. Esse pedaço de código fornece uma resposta para a pergunta e mostra que a seta também é capaz de formatar datas com facilidade e exibir informações para outros locais.
Veja http://arrow.readthedocs.io/en/latest/ para mais informações.
fonte
Você pode usar easy_date para facilitar:
fonte
Se você quiser apenas o formato da data, poderá convertê-lo manualmente passando seus campos individuais, como:
Você pode passar seus valores de sequência dividida para convertê-lo em tipo de data como:
Você receberá o valor resultante no formato da data.
fonte
Você também pode conferir
dateparser
Instalar:
Acho que é a maneira mais fácil de analisar datas.
Código de amostra:
Resultado:
fonte
Veja minha resposta .
Em dados do mundo real, esse é um problema real: formatos de data múltiplos, incompatíveis, incompletos, inconsistentes e em vários idiomas / região, geralmente misturados livremente em um conjunto de dados. Não é aceitável que o código de produção falhe, muito menos seja feliz como uma raposa.
Precisamos tentar ... capturar vários formatos de data e hora fmt1, fmt2, ..., fmtn e suprimir / manipular as exceções (de
strptime()
) para todos aqueles que não correspondem (e, em particular, evitam a necessidade de uma escada de tentativa recuada e profunda yukky cláusulas de captura). Da minha soluçãofonte
mostra a coluna "Data da hora de início" e "Hora do último login" são "object = strings" no quadro de dados
Ao usar a
parse_dates
opçãoread_csv
mencionada, você pode converter sua string datetime no formato pandas datetime.fonte