79

I have this string:

'2012-02-10' # (year-month-day)

and I need it to be as date type for me to use the date function isoweekday().

Does anyone know how I can convert this string into a date?

1
  • 1
    This would help for someone who also needs all date and time: > datetime.datetime.strptime('2020-10-13 00:00:00', '%Y-%m-%d %H:%M:%S') Commented Dec 14, 2020 at 8:40

5 Answers 5

165

While it seems the question was answered per the OP's request, none of the answers give a good way to get a datetime.date object instead of a datetime.datetime. So for those searching and finding this thread:

datetime.date has no .strptime method; use the one on datetime.datetime instead and then call .date() on it to receive the datetime.date object.

Like so:

>>> from datetime import datetime
>>> datetime.strptime('2014-12-04', '%Y-%m-%d').date()
datetime.date(2014, 12, 4)
Sign up to request clarification or add additional context in comments.

3 Comments

This is the real answer
This should be the accepted answer
If I convert the datetime.datetime object to a datetime.date object, the datetime.date object doesn't work with the datetime.timedelta() method. Is there a way to do date calculations (such as add or subtract days from a date) if the object is datetime.date?
70

You can do that with datetime.strptime()

Example:

>>> from datetime import datetime
>>> datetime.strptime('2012-02-10' , '%Y-%m-%d')
datetime.datetime(2012, 2, 10, 0, 0)
>>> _.isoweekday()
5

You can find the table with all the strptime directive here.


To increment by 2 days if .isweekday() == 6, you can use timedelta():

>>> import datetime
>>> date = datetime.datetime.strptime('2012-02-11' , '%Y-%m-%d')
>>> if date.isoweekday() == 6:
...     date += datetime.timedelta(days=2)
... 
>>> date
datetime.datetime(2012, 2, 13, 0, 0)
>>> date.strftime('%Y-%m-%d')   # if you want a string again
'2012-02-13'

5 Comments

That was exactly what I did: if datetime.strptime(a, "%Y-%m-%d").isoweekday() == 6: PONTO_MOVIMENTO = a
Just one more question... how can I add days to my date? For example, if isoweekdday() == 6, i need to increment the date in 2 days. Have idea how I do that? Thanks again!
I found out already using timedelta. But thanks!
@user1072627: Yes timdelta is the right tool. Even though you've already found it I added an example anyway. :)
This converts a string to a datetime. The OP asked how to convert a string to a date. If I print your converted datetime I get 2012-02-13 00:00:00 which is not a date and does not match the format specified in strptime.
5
from datetime import datetime

a = datetime.strptime(f, "%Y-%m-%d")

Comments

3

Use datetime.datetime.strptime:

>>> import datetime
>>> date = datetime.datetime.strptime('2012-02-10', '%Y-%m-%d')
>>> date.isoweekday()
5

Comments

3
>>> from datetime import datetime
>>> year, month, day = map(int, my_date.split('-'))
>>> date_object = datetime(year, month, day)

1 Comment

I used something like this when I needed a datetime.date object, NOT a datetime.datetime object. Unfortunately, datetime.date does not have a strptime() method.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.