ChatGPT解决这个技术问题 Extra ChatGPT

How do I convert a datetime to date?

How do I convert a datetime.datetime object (e.g., the return value of datetime.datetime.now()) to a datetime.date object in Python?

If you just need this for datetime.datetime.now(), please note that there is a method datetime.date.today().
if you have already imported datetime e.g. from datetime import datetime you can just add date from datetime import datetime, date

F
Flimm

Use the date() method:

datetime.datetime.now().date()

To get in UTC which can be very helpful --> datetime.datetime.utcnow() and correspondingly datetime.datetime.utcnow().date()
Thanks @SeanColombo, current date in a particular timezone should be datetime.datetime.now(pytz.timezone('US/Pacific')).date()
datetime.datetime.utcnow() is deprecated see docs.python.org/3/library/datetime.html#datetime.datetime replace with datetime.now(timezone.utc). The OP is actually after date so this is moot.
Given from datetime import datetime, date, timezone and one using a timezone with a non-zero offset, then datetime.now(timezone.utc).date() can be different from datetime.now().date() (the latter being also available as date.today()).
C
Community

From the documentation:

datetime.datetime.date() Return date object with same year, month and day.


t
tzot

You use the datetime.datetime.date() method:

datetime.datetime.now().date()

Obviously, the expression above can (and should IMHO :) be written as:

datetime.date.today()

to be fair, this answer (using .today()) is the most pythonic for the stated example question.
If you use today, be careful when comparing a date. today() has an hour component too. so if you do: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')and then if losdat < datetime.datetime.today(): it will always be true because losdatwill have a time component of midnight which will fall before the timestamp of today()
@DennisDecoene: why use datetime.datetime.today() instead of datetime.date.today(), when one wants a datetime.date object?
@tzot Yes that was also what I wanted to point out but was unclear about.
F
Furbeenator

You can convert a datetime object to a date with the date() method of the date time object, as follows:

<datetime_object>.date()

T
Tms91

Answer updated to Python 3.7 and more

Here is how you can turn a date-and-time object

(aka datetime.datetime object, the one that is stored inside models.DateTimeField django model field)

into a date object (aka datetime.date object):

from datetime import datetime

#your date-and-time object
# let's supposed it is defined as
datetime_element = datetime(2020, 7, 10, 12, 56, 54, 324893)

# where
# datetime_element = datetime(year, month, day, hour, minute, second, milliseconds)

# WHAT YOU WANT: your date-only object
date_element = datetime_element.date()

And just to be clear, if you print those elements, here is the output :

print(datetime_element)

2020-07-10 12:56:54.324893

print(date_element)

2020-07-10


k
kamran26

you could enter this code form for (today date & Names of the Day & hour) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

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

and enter this code for (today date simply): datetime.date.today().strftime('%y-%m-%d') '19-09-10'

for object : datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()


OP wanted to get datetime.date object, and not string, which strftime would return (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime).
S
Serenity
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()

Did you mean to post this answer here? It looks to me like you're answer is directed towards a different question.
W
Wei Chun Chang

I use data.strftime('%y-%m-%d') with lambda to transfer column to date


M
Manjula Devi
Solved: AttributeError: 'Series' object has no attribute 'date'

You can use as below,

df["date"] = pd.to_datetime(df["date"]).dt.date

where in above code date contains both date and time (2020-09-21 22:32:00), using above code we can get only date as (2020-09-21)