How do I convert a datetime.datetime
object (e.g., the return value of datetime.datetime.now())
to a datetime.date
object in Python?
datetime.datetime.now()
, please note that there is a method datetime.date.today()
.
from datetime import datetime
you can just add date from datetime import datetime, date
From the documentation:
datetime.datetime.date() Return date object with same year, month and day.
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()
.today()
) is the most pythonic for the stated example question.
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 losdat
will have a time component of midnight which will fall before the timestamp of today()
datetime.datetime.today()
instead of datetime.date.today()
, when one wants a datetime.date
object?
You can convert a datetime object to a date with the date() method of the date time object, as follows:
<datetime_object>.date()
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
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()
datetime.date
object, and not string, which strftime
would return (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime).
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()
I use data.strftime('%y-%m-%d')
with lambda to transfer column to date
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)
Success story sharing
datetime.datetime.utcnow()
and correspondinglydatetime.datetime.utcnow().date()
datetime.datetime.now(pytz.timezone('US/Pacific')).date()
from datetime import datetime, date, timezone
and one using a timezone with a non-zero offset, thendatetime.now(timezone.utc).date()
can be different fromdatetime.now().date()
(the latter being also available asdate.today()
).