Qual é uma maneira elegante de truncar um objeto de data e hora python?
Nesse caso em particular, para o dia. Então, basicamente, defina hora, minuto, segundos e microssegundos para 0.
Gostaria que a saída também fosse um objeto datetime, não uma string.
replace()
método retorna um objeto de data e hora, então o encantamento correto seria:dt = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
datetime
, não odate
objeto (que você pode obter usando adt.date()
chamada (não é necessário usar o construtor explícito)). O.replace()
método pode falhar sedatetime
adicionar suporte em nanossegundos . Você poderia usar em seudatetime.combine()
lugar .datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
?Use um
date
nãodatetime
se você não se importa com o tempo.Você pode atualizar uma data e hora como esta:
fonte
Quatro anos depois: outra maneira, evitando
replace
Eu sei que a resposta aceita de quatro anos atrás funciona, mas isso parece um pouco mais leve do que usar
replace
:Notas
datetime
objeto sem passar as propriedades de tempo para o construtor, obtém meia-noite.dt = datetime.datetime.now()
fonte
Você não pode truncar um objeto de data e hora porque é imutável .
No entanto, aqui está uma maneira de construir uma nova data e hora com campos de 0 hora, minuto, segundo e microssegundo, sem descartar a data original ou tzinfo:
fonte
replace
opção em primeiro lugar, pois provavelmente é isso que eles querem.tzinfo=now.tzinfo
. Atzinfo
meia-noite pode ser diferente, por exemplo, o deslocamento utc às2012-04-01 00:09:00
(9h) no fuso horário da Austrália / Melbourne é,AEST+10:00
mas éAEDT+11:00
às2012-04-01 00:00:00
(meia-noite) - há uma transição de final de horário de verão nesse dia. Você pode usar opytz
módulo para corrigi-lo, veja minha resposta.Para obter uma meia-noite correspondente a um determinado objeto datetime, você pode usar o
datetime.combine()
método :A vantagem em comparação com o
.replace()
método é quedatetime.combine()
solução baseada continuará a trabalhar mesmo quedatetime
introduz o módulo de nanossegundos apoiar .tzinfo
pode ser preservado se necessário, mas o deslocamento utc pode ser diferente à meia-noite, por exemplo, devido a uma transição do horário de verão e, portanto, uma solução ingênua (tzinfo
atributo de configuração de hora) pode falhar. Consulte Como obtenho o horário UTC de "meia-noite" para um determinado fuso horário?fonte
Você pode usar pandas para isso (embora possa ser uma sobrecarga para essa tarefa). Você pode usar o redondo , o piso e o teto como nos números comuns e em qualquer frequência de pandas de aliases de deslocamento :
fonte
Você pode usar datetime.strftime para extrair o dia, o mês, o ano ...
Exemplo:
Saída (hoje):
Se você apenas deseja recuperar o dia, pode usar o atributo day como:
Ouput (por hoje):
fonte
d.day
etc.Existe uma ótima biblioteca usada para manipular datas: Delorean
e se você deseja recuperar o valor da data e hora:
fonte
Veja mais em https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.dt.floor.html
Agora é 2019, acho que a maneira mais eficiente de fazer isso é:
fonte
Existe um módulo datetime_truncate que manipula isso para você. Apenas chama datetime.replace.
fonte
6 anos depois ... Encontrei este post e gostei mais da abordagem numpy:
Felicidades
fonte
fonte
Você pode apenas usar
É leve e retorna exatamente o que você deseja.
fonte
O que significa truncado?
Você tem controle total sobre a formatação usando o método strftime () e uma seqüência de formato apropriada.
http://docs.python.org/library/datetime.html#strftime-strptime-behavior
fonte
Se você estiver lidando com uma série do tipo DateTime, há uma maneira mais eficiente de truncá-los, especialmente quando o objeto Series tiver muitas linhas.
Você pode usar o chão função de
Por exemplo, se você deseja truncá-lo para horas:
Gere um intervalo de datas
Podemos verificar comparando o tempo de funcionamento entre as funções de substituição e de piso.
fonte
Aqui está outra maneira que se encaixa em uma linha, mas não é particularmente elegante:
fonte