Como converter data / hora em data (em Python)?

646

Como faço para converter um datetime.datetimeobjeto (por exemplo, o valor de retorno de datetime.datetime.now())um datetime.dateobjeto em Python?

Niklasfi
fonte
16
Se você só precisa disso datetime.datetime.now(), observe que existe um método datetime.date.today().
Thierry J.
Se você já importou datetime por exemplo from datetime import datetimevocê pode simplesmente adicionar a datafrom datetime import datetime, date
Josh

Respostas:

984

Use o date()método:

datetime.datetime.now().date()
ars
fonte
14
Para entrar em UTC, que pode ser muito útil -> datetime.datetime.utcnow()e, correspondentementedatetime.datetime.utcnow().date()
Nick Brady
2
Obrigado @SeanColombo, a data atual em um fuso horário específico deve serdatetime.datetime.now(pytz.timezone('US/Pacific')).date()
Monica Para CEO
132

A partir da documentação:

datetime.datetime.date()

Objeto de data de retorno com o mesmo ano, mês e dia.

Peter Mortensen
fonte
62

Você usa o datetime.datetime.date()método:

datetime.datetime.now().date()

Obviamente, a expressão acima pode (e deve IMHO :) ser escrita como:

datetime.date.today()
tzot
fonte
14
não confunda o cara.
Fiatjaf 13/08/2012
1
para ser justo, essa resposta (usando .today()) é a mais pitônica para a pergunta de exemplo declarada.
Dannid
2
Se você usa hoje, tenha cuidado ao comparar uma data. today()tem um componente de hora também. por isso, se você faz: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')e, em seguida, if losdat < datetime.datetime.today():será sempre verdade, porque losdatterá um componente de tempo de meia-noite que vai cair antes do timestamp detoday()
Dennis Decoene
3
@DennisDecoene: por que usar em datetime.datetime.today()vez de datetime.date.today(), quando se quer um datetime.dateobjeto?
tzot 29/03
@ tzot Sim, também era isso que eu queria destacar, mas não estava claro.
Dennis Decoene
45

Você pode converter um objeto datetime em uma data com o método date () do objeto date time, da seguinte maneira:

<datetime_object>.date()
Furbeenator
fonte
3
import time
import datetime

# use mktime to step by one day
# end - the last day, numdays - count of days to step back
def gen_dates_list(end, numdays):
  start = end - datetime.timedelta(days=numdays+1)
  end   = int(time.mktime(end.timetuple()))
  start = int(time.mktime(start.timetuple()))
  # 86400 s = 1 day
  return xrange(start, end, 86400)

# if you need reverse the list of dates
for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)):
    print datetime.datetime.fromtimestamp(dt).date()
Serenidade
fonte
2
Você quis postar esta resposta aqui? Parece-me que sua resposta é direcionada para uma pergunta diferente.
Todos os trabalhadores são essenciais
2

você pode inserir este formulário de código para (data atual e nomes do dia e hora) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

'19 -09-09 Seg 17:37:56 '

e insira este código para ( data de hoje simplesmente) : datetime.date.today().strftime('%y-%m-%d') '19 -09-10 '

para objeto: datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()

kamran26
fonte
OP queria obter datetime.date objeto, e não a string, que strftimeretornaria (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime ).
Grzegorz Skibinski 10/09/19