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 :

Automatisation de calcul de champ DATE


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut Automatisation de calcul de champ DATE
    Bonjour à tous
    Je suis novice et j'ai besoin d'aide en python.
    J'ai 3 champs.
    Le champ X est en format texte et contient les expressions suivantes*: 1an; 2ans; 3ans
    Le champ Y est au format date ("%d-%m-%Y) mais n'est pas encore rempli
    Le champ Z est aussi au format ("%d-%m-%Y). est le le champ à remplir automatiquement

    Je veux automatiser la mise à jour du champ Z de sorte que lorsque je vais entrer la date dans le Y,

    si X==1 an, Z soit égal à Y +1

    si X==2 ans, Z soit égal à Y +2

    si X==3 ans, Z soit égal à Y +3

    Je vous remercie d'avance pour votre contribution

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Djakaridja.KONE Voir le message
    Le champ Y est au format date ("%d-%m-%Y) mais n'est pas encore rempli...
    si X==1 an, Z soit égal à Y +1
    Comment conçois-tu l'utilisation d'une valeur "Y" qui n'a pas été remplie ? Dans tous les langages du monde on commence par remplir une variable avant de l'utiliser.

    De plus (question subsidiaire) comment déduire une date jj-mm-aaaa avec la valeur "1 an" ??? 1 an c'est une durée, ce n'est pas une date.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    j'ai quelques cellules de Y rempli pour test. Et X exprime un delai: si = "1 an", Z= Y+1

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Dans le package dateutil, il existe une routine relativedelta.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from datetime import date
    from dateutil.relativedelta import relativedelta
     
    x = date(1984,12,24)
    y = x + relativedelta(years=10)
    print(x)
    print(y)

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 : 4 062
    Par défaut
    Et les années bissextiles sont prises en compte ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    @fred1599, non, les années bissextiles sont pas prises en compte

    @popo, merci pour votre réponse. Le problème c'est que je doit tenir compte de la condition X qui est égale : 1an; 2ans; 3 ans

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Djakaridja.KONE Voir le message
    @popo, merci pour votre réponse. Le problème c'est que je doit tenir compte de la condition X qui est égale : 1an; 2ans; 3 ans
    Ben au lieu de years=10 tu écrits years=x...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    question bête, mais qu'est-ce que tu appelles "champs" ?

    Sinon on peut aussi utiliser date.replace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from datetime import date
    x = date(2002, 12, 31)
    y=x.replace(year=x.year+2) #donne datetime.date(2004, 12, 31)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut problème resolu
    J'ai pu résoudre le problème, je la mets là si ça peut aider quelqu'un d'autre plus tard.
    X= delai_co
    Y= date_dia
    Z= date_f_d

    Merci à ous pour vos contributions
    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
    26
    27
    28
    29
    30
    # Import system modules
    import arcpy
    import sys
    from datetime import datetime, timedelta
     
     
    inFeatures = r"\\srv-esriapp\connexion\sig_ev@srv-esribdd_dc.sde\sig.ev.ev_arbre_GBA"
    fields = ['date_dia', 'delai_co', 'date_f_d']  
     
    # Retrieve the field values  
    data = []  
    with arcpy.da.UpdateCursor(inFeatures, fields) as cursor:
        for row in cursor:
            date_dia, delai_co, date_f_d = row
            if date_dia is None or date_dia == "":
                # Si date_dia est nul ou vide, ne rien renseigner dans date_f_d
                row[2] = None
            elif delai_co in ["Aucun", "Indefini", None, ""]:
                # Si delai_co est "Aucun", "Indefini", nul ou vide, mettre nul ou ne rien renseigner dans date_f_d
                row[2] = None
            else:
                if delai_co == "1_an":
                    date_f_d = date_dia + timedelta(days=365)
                elif delai_co == "2_ans":
                    date_f_d = date_dia + timedelta(days=365*2)
                elif delai_co == "3_ans":
                    date_f_d = date_dia + timedelta(days=365*3)
                # Update the field 
                row[2] = date_f_d
            cursor.updateRow(row)

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

Discussions similaires

  1. Récupérer la valeur d'un champ date pour un calcul en VBA
    Par dede tabby dans le forum VBA Word
    Réponses: 6
    Dernier message: 14/09/2011, 15h08
  2. [WD-2007] Problème de calcul de champ date
    Par mumu63 dans le forum Word
    Réponses: 7
    Dernier message: 10/01/2011, 19h10
  3. Calcul de moyenne sur des champs Date
    Par schwinny dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/05/2008, 12h57
  4. calcul inter-enregistrement pour champs date
    Par gmgdev dans le forum IHM
    Réponses: 3
    Dernier message: 19/05/2007, 22h52
  5. composant de calcul [champ date] avec rave report
    Par segnac dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/06/2005, 19h08

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