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 :

[datetime] obtenir le nombre de jour maximal d'un mois


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [datetime] obtenir le nombre de jour maximal d'un mois
    Bonjour !

    J'aimerai savoir comment peut on recuperer le nombre maximal de jour qu'il peut y avoir dans un mois (en fonction du mois et de l'année).
    (sans faire 15-20 lignes de code avec un gros switch en fonction du mois)

    Le but recherché est de rajouter a un datetime un certain nombre de mois.

    J'ai gerer l'année avec des modulo 12 mais par exemple si je rajoute 5 mois a un datetime.now() (ie 29 septembre 2006) et bien on tombe sur le (29 fevrier 2007) et cela leve cette exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ValueError: day is out of range for month
    merci de votre aide !

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    bon j'ai créer la grosse fonction (que j'ai reussi a compacter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def getDay(year,month,day):
        if (month == 4 or 6 or 9 or 11) and day > 30: return 30
        elif month == 2:
            if (year % 4 == 0) and (year % 100 != 0) or  (year % 400 == 0):
                if day > 29: return 29
            elif day > 28: return 28
        return day
    si vous avez une meilleur technique hesitez pas a me le dire

  3. #3
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Utilise le module datetime et capture l'exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> from datetime import datetime
    >>> datetime(2006, 2, 29)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: day is out of range for month
    >>> datetime(2006, 3, 29)
    datetime.datetime(2006, 3, 29, 0, 0)
    >>> datetime(2004, 2, 29)
    datetime.datetime(2004, 2, 29, 0, 0)
    >>>

  4. #4
    Membre expérimenté
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Par défaut
    Une petite classe sympa :

    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
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env python
    #-*- coding: iso-8859-15
     
    import datetime
     
    class DernierJourDuMois:
    	def __init__(self, mois, annee):
    		self.mois = mois
    		self.annee = annee
    		self.jour = 31
    		self.Calcule()
     
    	def Calcule(self):
    		try:
    			laDate = datetime.datetime(self.annee, self.mois, self.jour)
    		except:
    			self.jour = self.jour - 1
    			self.Calcule()
     
    	def GetJour(self):
    		return self.jour
     
    if __name__ == '__main__':
    	Jour = DernierJourDuMois(2, 2004).GetJour()
    	print Jour

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2003
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 8
    Par défaut
    Salut je sais que c'est vieux mais si ça peut aider voici ce que j'ai fait pour avoir le nombre de jours dans un mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from datetime import datetime
     
    jour_mois = 0
    for i in range(1, 32):
    	try: a=datetime(2006, 02, i)
    	except : pass
    	else: jour_mois = i
     
    print jour_mois

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Voilà une solution courte sans module date:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def nbjoursmois(mois,an):
        nbj = (31,28,31,30,31,30,31,31,30,31,30,31)[mois-1]
        if mois==2:
            if (an % 4)==0:
                if not (((an % 100)==0) and ((an % 400)<>0)):
                    nbj+=1
        return nbj
    Tyrtamos

Discussions similaires

  1. [Toutes versions] Obtenir le nombre de jour entre aujourdh' hui et le dernier jour de l' année
    Par Aladin_23 dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/12/2011, 19h56
  2. Excel : Nombre de jours ouvrés dans un mois
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/12/2005, 10h09
  3. Comment obtenir le nombre de jours entre deux timedatepicker
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2005, 11h59

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