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

 Delphi Discussion :

Une condition particulière, pour trouver mieux


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut Une condition particulière, pour trouver mieux
    Salut à tous, j'ai cette condition en espérant trouver mieux.

    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
    var Year_Now, Month_Now, Year_Calc, Month_Calc : String;
    begin
      Year_Now := '2021';
      Month_Now := '03';
      Year_Calc := '2018';
      Month_Calc := '03';
      IF Year_Calc > Year_Now Then
        Exit
      Else
        IF Year_Calc < Year_Now Then
          Begin
            WriteLn(Year_Calc + ' < ' + Year_Now);
          End
        Else
            IF Month_Calc < Month_Now Then
                Begin
                  WriteLN(Year_Calc + ' est Egale a '+ Year_Now + ' et ' + Month_Calc + ' est inférieur à ' + Month_Now);
                End;
    end.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    1) d'ou vient la Date ? son format ?
    2) DecodeDate fourni Year, Month, Day en Word, une comparaison numérique.
    3) Il n'y a pas de le cas de l'égalité

    Et finalement, quel est le besoin ?
    La comparaison de Date peut se faire directement via deux TDate et un EncodeDate, au pire si l'on veut gérer séparément l'année avec YearsBetween

    Sinon même résultat en plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      if Year_Calc = Year_Now then
      begin
        if Month_Calc < Month_Now then
            WriteLN(Year_Calc + ' est Egale a '+ Year_Now + ' et ' + Month_Calc + ' est inférieur à ' + Month_Now);
      end
      else if Year_Calc < Year_Now then
        WriteLn(Year_Calc + ' < ' + Year_Now)
      else
        Exit;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Points : 71
    Points
    71
    Par défaut
    Merci ShaiLeTroll , sur le programme je travail avec des Périodes extraite d'une des tables Ex: '202101' ou '2021T4', que je doit comparaître avec la date du System pour en quelque les pénalités. ça me va aussi en plus court. merci

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Si c'est une simple comparaison de délai entre deux dates, on peut faire comme cela si tu veux savoir si '202101' ou '2021T4' antérieur à la date en cours
    Tu oublies une problématique, si c'est le début ou la fin d'un mois ou d'un trimestre, cela change le résultat

    '202101' => True, date dépassée (20210131)
    '2021T2' =>False, date non atteinte (20210631)
    '2021T2' + ATrimestreEnd à False =>True, date dépassée (20210401)
    '2021T4', False, date non atteinte (20211231)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button6Click(Sender: TObject);
    begin
      if IsPeriodeExpired('202101') then
        ShowMessage('202101');
     
      if IsPeriodeExpired('2021T2') then
        ShowMessage('2021T2');
     
      if IsPeriodeExpired('2021T2', False) then
        ShowMessage('2021T2 False');
     
      if IsPeriodeExpired('2021T4') then
        ShowMessage('2021T4');
    end;
    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
    function IsPeriodeExpired(const APeriode: string; APeriodeEnd: Boolean = True): Boolean;
    var
      PeriodeDate: TDate;
      PeriodYear, PeriodMonth, PeriodDay: Word;
    begin
      if Length(APeriode) = 6 then
      begin
        PeriodYear := StrToInt(Copy(APeriode, 1, 4));
        if APeriode[5] = 'T' then
        begin
          if APeriodeEnd then
            PeriodMonth := 3 * StrToInt(APeriode[6])
          else
            PeriodMonth := 1 + 3 * (StrToInt(APeriode[6]) - 1)
        end
        else
          PeriodMonth := StrToInt(Copy(APeriode, 5, 2));
     
        if APeriodeEnd then
          PeriodDay := DaysInAMonth(PeriodYear, PeriodMonth) // System.DateUtils
        else
          PeriodDay := 1;
     
        Result := EncodeDate(PeriodYear, PeriodMonth, PeriodDay) < Now();
      end
      else
        raise Exception.CreateFmt('Période "%s" invalide', [APeriode]);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [XL-2010] Existe-t-il une methode universelle pour trouver la dernière ligne
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2015, 14h07
  2. [Drupal] Comment ajouter une condition presave pour un type de contenu?
    Par maxwel56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 26/04/2012, 18h25
  3. [CSS 3] Appliquer une CSS particulière pour propriété CSS3 non reconnue
    Par Général03 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 02/04/2012, 23h13
  4. Réponses: 21
    Dernier message: 04/05/2010, 12h14

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