IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Erreur dans le traitement de date avec datetime


Sujet :

Django Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 28
    Points
    28
    Par défaut Erreur dans le traitement de date avec datetime
    Bonjour,

    j'ai un soucis lors de la récupération d'une date dans une page html et le traitement de celle-ci :
    - le format de la date est le suivant : dispo u'2010-03-09' issue d'un get.
    - je lui effectue ce traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if 'dispo' in request.GET:
            dispo = request.GET['dispo']
            if dispo == '':
                dispo = False
            else:
                dispo.split("-")
                month=dispo[1]
                month.split('0')
                if month[0] == '':
                    the_month = month[1]
                else:
                    the_month = month[0]
                day=dispo[2]
                day.split('0')
                if day[0] == '':
                    the_day = day[1]
                else:
                    the_day = day[0]
                end_date = datetime.date(int(dispo[0]), int(the_month), int(the_day))
    Car la fonction datetime.date n'accepte que les valeurs 1...12 pour les mois et a le même type de restrictions pour les jours (ce qui au passage n'a pas l'air de s'appliquer car si je ne traite pas les jours avec une entrée comme u'03' la fonction marche sans problème).

    Si je force le mois avec une valeur directe comme 10 ou 4, la fonction marche.
    Dans une console python la fonction marche et renvoie bien le jour ou le mois dans le '0' devant.
    Si j'utilise ce que j'ai mis en citation, j'obtiens cette erreur, que le mois soit 01 ou 10 ou 11 (les valeurs en entrée vont de 01 .. à 09 10 11 12) :
    ValueError at /rooms/

    month must be in 1..12

    Request Method: GET
    Request URL: http://127.0.0.1:8000/rooms/?city=&d...ice=&done=True
    Exception Type: ValueError
    Exception Value:

    month must be in 1..12

    Exception Location: C:\Python26\roomdemosite\roomshare\views.py in rooms, line 173
    Python Executable: C:\Python26\python.exe
    Python Version: 2.6.4
    Python Path: ['C:\\Python26\\roomdemosite', 'C:\\WINDOWS\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\PIL']
    Server time: Tue, 23 Mar 2010 15:34:10 +0100


    Environment:

    Request Method: GET
    Request URL: http://127.0.0.1:8000/rooms/?city=&d...ice=&done=True
    Django Version: 1.1.1
    Python Version: 2.6.4
    Installed Applications:
    ['django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.admin',
    'roomdemosite.roomshare']
    Installed Middleware:
    ('django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware')


    Traceback:
    File "C:\Python26\lib\site-packages\django\core\handlers\base.py" in get_response
    92. response = callback(request, *callback_args, **callback_kwargs)
    File "C:\Python26\roomdemosite\roomshare\views.py" in rooms
    173. end_date = datetime.date(int(dispo[0]), int(the_month), int(the_day))

    Exception Type: ValueError at /rooms/
    Exception Value: month must be in 1..12

    GET
    Variable Value
    city u''
    price u''
    done u'True'
    dispo u'2010-10-15'
    Je dois avoir manqué quelque chose mais je ne comprend pas du tout d'où ça peut venir ... halp plz :/

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Bonjour,
    Je trouve ta façon de faire bien compliqué. Je ne comprend l'intérêt du month.split('0'). Mais peut être ai-je raté quelque chose.

    Ton code commence mal. Lorsque tu fais:
    ça retourne une liste. Il faut donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dispo = dispo.split("-")
    si tu veux récupérer cette liste, sinon ça ne sert à rien.

    Voici un exemple simplifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import datetime
     
    dispo = u'2010-03-09'
    year, month, day = dispo.split("-")
    end_date = datetime.date(int(year), int(month), int(day))
    Ou avec une list comprehension:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import datetime
     
    dispo = u'2010-03-09'
    end_date = datetime.date(*[int(a) for a in dispo.split("-")])
    En fait une méthode est déjà prévu dans la classe datetime:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import datetime
     
    dispo = u'2010-03-09'
    end_date = datetime.datetime.strptime(dispo, "%Y-%m-%d").date()

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 16
    Points : 28
    Points
    28
    Par défaut
    A la base je n'avais pas connaissance de la fonction strptime(), donc j'essayais de me débarrasser des '0' dans les mois et les jours de type '0X' (d'où le split('0')) pour satisfaire les critères de la fonction datetime.date().

    Merci beaucoup de ton aide ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les dates avec Datetime
    Par okoweb dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2013, 17h01
  2. [Débutant] Comparer une date avec DateTime
    Par arngrimur dans le forum C#
    Réponses: 8
    Dernier message: 30/09/2011, 10h24
  3. Réponses: 3
    Dernier message: 16/06/2011, 10h25
  4. traitement des dates avec java
    Par papoulouis dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 04/10/2008, 11h08
  5. Réponses: 2
    Dernier message: 19/09/2007, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo