Jak przekonwertować datetime na datę (w Pythonie)?

646

Jak przekonwertować datetime.datetimeobiekt (np. Wartość zwracaną datetime.datetime.now())na datetime.dateobiekt w Pythonie?

niklasfi
źródło
16
Jeśli potrzebujesz tego datetime.datetime.now(), pamiętaj, że istnieje metoda datetime.date.today().
Thierry J.
jeśli już zaimportowałeś from datetime import datetimedatęfrom datetime import datetime, date
Josh

Odpowiedzi:

984

Użyj date()metody:

datetime.datetime.now().date()
ars
źródło
14
Aby dostać się do UTC, co może być bardzo pomocne -> datetime.datetime.utcnow()i odpowiedniodatetime.datetime.utcnow().date()
Nick Brady
2
Dzięki @SeanColombo, bieżąca data w określonej strefie czasowej powinna byćdatetime.datetime.now(pytz.timezone('US/Pacific')).date()
Monica Dla CEO
132

Z dokumentacji:

datetime.datetime.date()

Zwróć obiekt daty z tym samym rokiem, miesiącem i dniem.

Peter Mortensen
źródło
62

Używasz datetime.datetime.date()metody:

datetime.datetime.now().date()

Oczywiście powyższe wyrażenie można (i powinno IMHO :) zapisać jako:

datetime.date.today()
tzot
źródło
14
nie mylić faceta.
fiatjaf
1
.today()prawdę mówiąc , ta odpowiedź (użycie ) jest najbardziej pytoniczna dla podanego przykładowego pytania.
Dannid
2
Jeśli używasz dzisiaj, zachowaj ostrożność podczas porównywania daty. today()ma również składnik godziny . więc jeśli to zrobisz: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')i wtedy if losdat < datetime.datetime.today():będzie to zawsze prawdą, ponieważ losdatbędzie miała składnik czasu północy, który wypadnie przed today()
datą
3
@DennisDecoene: po co używać datetime.datetime.today()zamiast datetime.date.today(), kiedy chce się datetime.dateobiektu?
tzot
@tzot Tak też chciałem zwrócić uwagę, ale nie byłem pewien.
Dennis Decoene
45

Możesz przekonwertować obiekt daty i godziny na datę za pomocą metody date () obiektu daty i godziny w następujący sposób:

<datetime_object>.date()
Furbeenator
źródło
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()
Spokój
źródło
2
Czy chciałeś opublikować tę odpowiedź tutaj? Wydaje mi się, że twoja odpowiedź dotyczy innego pytania.
Wszyscy pracownicy są niezbędni
2

możesz wpisać ten formularz kodu dla (dzisiejsza data i Nazwy Dnia i godziny) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

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

i wprowadź ten kod dla ( dzisiejsza data po prostu) : „ datetime.date.today().strftime('%y-%m-%d') 19 -09-10”

dla obiektu: 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
źródło
OP chciał uzyskać datetime.dateobiekt, a nie ciąg znaków, który strftimezwróciłby (zob .: docs.python.org/3/library/datetime.html#datetime.date.strftime ).
Grzegorz Skibinski,