49

I want to convert my string date to django date format. I tried a method. but did not work.

date = datetime.datetime.strptime(request.POST.get('date'),"Y-mm-dd").date()

I got this error.

time data '2014-04-07' does not match format 'Y-mm-dd'

what 's wrong in my code.

4 Answers 4

74

It should be %Y-%m-%d:

>>> s = "2014-04-07"
>>> datetime.datetime.strptime(s, "%Y-%m-%d").date()
datetime.date(2014, 4, 7)

According to the documentation:

  • %Y stands for a year with century as a decimal number
  • %m - month as a zero-padded decimal number
  • %d - day of the month as a zero-padded decimal number
Sign up to request clarification or add additional context in comments.

2 Comments

I have a string date with timezone which is giving me an error when converting: ValueError: unconverted data remains: T18:30:00.000Z How can I convert this string date: 2019-10-15T18:30:00.000Z?
@saran3h you can use django.utils.dateparse.parse_datetime for that. Check Melvyn's answer here: stackoverflow.com/questions/8636760/…
37

It might be convenient to use django's dateparse in this case.

from django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)

2 Comments

parse_date not working as espected and returns None if date not in %Y-%m-%d format.
As mentioned in other comments, parse_datetime worked for me.
13

django.utils.dateparse.parse_date function will return None if given date not in %Y-%m-%d format

I have not found a function in django source code to parse string by DATE_INPUT_FORMATS. So I wrote a custom helper function for that and I have added to here for help others.

from datetime import datetime
from django.utils.formats import get_format

def parse_date(date_str):
    """Parse date from string by DATE_INPUT_FORMATS of current language"""
    for item in get_format('DATE_INPUT_FORMATS'):
        try:
            return datetime.strptime(date_str, item).date()
        except (ValueError, TypeError):
            continue

    return None

3 Comments

Awesome! if have few different formats, the answer is excellent!
Some strings may be accepted wrongly by multiple formats. 04-07-2021 or 07-04-2021?
@PedroLacerda yes, if your DATE_INPUT_FORMATS includes these formats both, it works buggy. I think you should not use both formats.
8

It might be convenient to use Django's dateparse's parse_datetime in this case. you don't have to explicitly apply the data time format if that is dynamic.

from django.utils.dateparse import parse_datetime
date = parse_datetime(datetime_str)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.