web-dev-qa-db-fra.com

Django chaîne au format date

Je veux convertir ma date de chaîne au format de date Django. J'ai essayé une méthode. Mais je n'ai pas fonctionné.

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

J'ai eu cette erreur.

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

ce qui ne va pas dans mon code.

22
SAFEER N

Ça devrait être %Y-%m-%d:

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

Selon la documentation :

  • %Y représente une année avec le siècle comme nombre décimal
  • %m - mois sous forme de nombre décimal avec un zéro
  • %d - jour du mois sous la forme d'un nombre décimal à remplissage zéro

J'espère que cela pourra aider.

38
alecxe

Il peut être pratique d'utiliser dateparse de Django dans ce cas.

from Django.utils.dateparse import parse_date
date_str = request.POST.get('date')
date = parse_date(date_str)
20
Daniel Backman

Django.utils.dateparse.parse_date la fonction renverra None si la date indiquée n'est pas dans %Y-%m-%d format

Je n'ai pas trouvé de fonction dans Django code source pour analyser la chaîne par DATE_INPUT_FORMATS. J'ai donc écrit une fonction d'aide personnalisée pour cela et j'ai ajouté ici pour aider les autres.

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
7
Mesut Tasci