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

Python Discussion :

Date d'un jour à venir


Sujet :

Python

  1. #1
    Membre habitué Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Points : 125
    Points
    125
    Par défaut Date d'un jour à venir
    Bonjour,

    Existe-t-il d'une façon simple le moyen d'avoir la date d'un jour particulier de la semaine à venir ?

    Hum.. Pas clair. Bon un exemple.
    Par exemple, nous sommes le 25/07/2012 et je voudrais avoir la date du prochain mardi (sous la forme jj/mm/aaaa, en passant en paramètre le 25/07/2012).
    Évidemment, la commande (ou fonction) doit marcher quelque soit le jour de la semaine où je l'exécute (seul le paramètre changerait).

    Merci, si vous pouvez, de répondre à cette question bête avant que je n'applique la méthode du "pourquoi faire simple quand on peut faire compliqué.."

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from datetime import date, timedelta
    >>> TODAY = date.today() # date d'aujourd'hui
    >>> DATE7DAY = TODAY + timedelta(days=7) # Différence entre les 2 dates est de 7 jours
    >>> DATE7DAY # Date après 7 jours                            
    datetime.date(2012, 8, 2)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour atteindre le mardi suivant, ou n'importe quel autre jour de la semaine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import datetime
     
    def joursemsuivant(date, joursem=0):
        joursem0 = date.weekday() # lundi=0 ... dimanche=6
        delta = joursem-joursem0
        if delta<0:
            delta += 7
        return date + datetime.timedelta(delta)
    Utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    date = datetime.date(2012, 7, 25)
     
    # mardi suivant (mardi=1):
    print "Nous sommes le ", date.strftime("%d/%m/%Y"), "=> Mardi suivant:", joursemsuivant(date, 1).strftime("%d/%m/%Y")
    Nous sommes le  25/07/2012 => Mardi suivant: 31/07/2012
     
    # vendredi suivant (vendredi=4):
    print "Nous sommes le ", date.strftime("%d/%m/%Y"), "=> Vendredi suivant:", joursemsuivant(date, 4).strftime("%d/%m/%Y")
    Nous sommes le  25/07/2012 => Vendredi suivant: 27/07/2012
    Petite subtilité: quand on part d'un mardi et qu'on cherche le mardi suivant: veut-on atteindre ce mardi (le même jour) ou le mardi suivant? Le code ci-dessus donne le mardi suivant. Pour rester sur le même jour, il suffit de remplacer dans la fonction "if delta<0" par "if delta<=0". Si besoin, il faudrait ajouter un 3e argument optionnel pour traiter les 2 cas.

    [edit] on peut faire ça en une seule ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateSemaineSuivant = lambda date, joursem: date + datetime.timedelta((joursem-date.weekday())%7)
    Voyons ce que ça donne:

    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
     
    date0 = datetime.date(2012, 7, 25)
    for d in xrange(0,10):
        date = date0 + datetime.timedelta(d)
        print "Nous sommes le ", date.strftime("%d/%m/%Y"), "=> Mardi suivant:", dateSemaineSuivant(date, 1).strftime("%d/%m/%Y")
    Nous sommes le  25/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  26/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  27/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  28/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  29/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  30/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  31/07/2012 => Mardi suivant: 31/07/2012
    Nous sommes le  01/08/2012 => Mardi suivant: 07/08/2012
    Nous sommes le  02/08/2012 => Mardi suivant: 07/08/2012
    Nous sommes le  03/08/2012 => Mardi suivant: 07/08/2012
    Avec cette solution, si on est déjà le mardi, le mardi suivant est le même jour.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour,

    je vous recommande d'essayer le module dateutil.

    Bon python
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  5. #5
    Membre habitué Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Points : 125
    Points
    125
    Par défaut
    Merci pour vos idées et particulièrement à Tyrtamos.
    C'est exactement ce que je cherchais.

    Edit : effectivement, je vais aussi regarder le module dateutil qui semble aborder le sujet qui m'intéresse. Merci.

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

Discussions similaires

  1. Decaler les dates d'un jour en jours ouvrables
    Par beurnoir dans le forum Access
    Réponses: 4
    Dernier message: 06/10/2005, 10h13
  2. [Dates] Nombre de jours entre deux dates
    Par cmoiscrat dans le forum Langage
    Réponses: 3
    Dernier message: 22/09/2005, 15h25
  3. [DATE] - Le 5° jour de la 31° semaine
    Par spidetra dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 01/08/2005, 09h35
  4. [Date] Enlever un jour.
    Par nebule dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 25/03/2005, 16h19
  5. [Date] Récuperer la date de 7 jours avant
    Par smy85 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 11/05/2004, 12h05

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