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 :

formater le resultat de WeekOF()


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut formater le resultat de WeekOF()
    Salut à tous,

    je cherche à générer un identifiant de semaine pour la date en cours.
    pour cela je fait un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    inttostr(YearOf(now))+'-'+inttostr(WeekOf(now))
    ce qui me renvoi par exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2007-1
    2007-4
    2007-15
    200-35
    mon problème vient du formatage de WeekOf() qui se fait sur un ou deux digit.
    j'aurais aimé obtenir des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2007-01
    2007-04
    2007-15
    2007-35
    est ce possible ?
    d'avance merci

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Le plus trivial est ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DateToSem( DDate: TDatetime ): string;
    var
      SAn, SSem: string;
    begin
      SAn := YearOf( DDate );
      SSem := WeekOf( DDate );
      if Length( SSem ) = 1 
        then SSem := '0' + SSem;
      Result := SAn + '-' + SSem;
    end;
    Après il y a peut être des astuces ... mais bon
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    ca peut être bien comme ca
    je fouille la doc et il me semble que ceci est pas mal non plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    format('%2d',weekOf(now))
    (pas encore testé)

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IntToStr(YearOf(Now)) + '-' + Format('%2.2d', [WeekOf(Now)]);
    [edit]
    Cette syntaxe est plus correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IntToStr(YearOf(Now)) + '-' + Format('%.2d', [WeekOf(Now)]);
    [/edit]

    @+ Claudius

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    bon, ta syntaxe doit être la bonne la mienne passe pas

    sinon ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DateToSem( DDate: TDatetime ): string;
    var
      SAn, SSem: string;
    begin
      SAn := inttostr(YearOf( DDate ));
      SSem := inttostr(WeekOf( DDate ));
      if Length( SSem ) = 1 
        then SSem := '0' + SSem;
      Result := SAn + '-' + SSem;
    end;
    marche très bien ! Merci

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function DateToSem( DDate: TDatetime ): string;
    begin
      Result := IntToStr(YearOf(DDate)) + '-' + Format('%.2d', [WeekOf(DDate)]);
    end;
    me semble être la solution la plus élégante mais en terme de performance ? vaut mieux celle juste au dessu sou pas ?

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    L'une ou l'autre revient exactement au même, mais la 2° est plus élégante car dans ce format seule la valeur pécisée après le . est prise en compte.

    [edit]
    Quoique pas tout à fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Format('5.2', [WeekOf[Now]); // Renvoie '   03' avec 3 espaces devant.
    [/edit]
    @+

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Faut également faire attention aux derniers jours de l'année, effectue ce test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var
      MaDate: TDateTime;
    begin
      MaDate := EncodeDate(2007, 12, 31);
      ShowMessage(IntToStr(YearOf(MaDate)) + '-' + Format('%.2d', [WeekOf(MaDate)]));
    end;
    Cela renvoie '2007-01', pas bon !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    et pourtant ça n'est pas logique !

    une solution ?

  10. #10
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Claudius a raison,

    Il faut utiliser WeekOfTheYear pour utiliser l'année de la semaine trouvée.

    En effet, le 31/12/2007, correspond à 2008-01 !
    (le jeudi de la semaine en question faisant foi et se trouvant en 2008...)
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    ca vient sans doute du fait que 52*7 = 364 != 365

  12. #12
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function DateToSem( DDate: TDatetime ): string;
    var
      SAn, SSem: string;
      IAn: Word;
    begin
      SSem := inttostr(WeekOfTheYear( DDate, IAn ));
      SAn := inttostr(IAn);
      if Length( SSem ) = 1 
        then SSem := '0' + SSem;
      Result := SAn + '-' + SSem;
    end;
    Je n'ai pas tester du tout, mais ca doit être un truc dans ce style.
    Sinon le formattage direct avec Format est surement mieux...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par TicTacToe
    Claudius a raison,

    Il faut utiliser WeekOfTheYear pour utiliser l'année de la semaine trouvée.

    En effet, le 31/12/2007, correspond à 2008-01 !
    (le jeudi de la semaine en question faisant foi et se trouvant en 2008...)
    impeccable ! Merci

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 744
    Points : 15 160
    Points
    15 160
    Par défaut
    Salut !

    Et comme ça (testé, OK) ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      MaDate: TDateTime;
      w: integer;
    begin
      MaDate := EncodeDate(2007, 12, 31);
      if (MonthOfTheYear(MaDate) = 12) and (WeekOfTheYear(MaDate) = 1) then w := 53;
      ShowMessage(IntToStr(YearOf(MaDate)) + '-' + Format('%.2d', [w]));
    Car cette année le 31 décembre est un lundi (voir l'aide)
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par DELPHI HELP
    Syntaxe
    function WeekOfTheYear(const AValue: TDateTime): Word; overload;

    function WeekOfTheYear(const AValue: TDateTime; var AYear: Word): Word; overload;


    Description
    Appelez WeekOfTheYear pour obtenir la semaine de l'année représentée par une valeur TDateTime spécifiée. WeekOfTheYear renvoie une valeur comprise entre 1 et 53.
    AYear renvoie l'année dans laquelle la semaine spécifiée tombe. L'année renvoyée peut différer de celle de AValue. En effet, la première semaine d'une année est la première qui contient au moins quatre jours dans cette année. Par conséquent, si le premier jour calendaire de l'année est vendredi, samedi ou dimanche, WeekOfTheYear renvoie la dernière semaine de l'année antérieure pour le premier, les deux premiers ou les trois premiers jours de l'année calendaire. De même, si le dernier jour calendaire de l'année est lundi, mardi ou mercredi, WeekOfTheYear renvoie 1 (la première semaine de l'année calendaire suivante) pour le dernier, les deux derniers ou les trois derniers jours de l'année calendaire.
    ca s'utilise comment concretement svp ?

    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      MaDate: TDateTime;
      w: integer;
    begin
      MaDate := EncodeDate(2007, 12, 31);
      if (MonthOfTheYear(MaDate) = 12) and (WeekOfTheYear(MaDate) = 1) then w := 53;
      ShowMessage(IntToStr(YearOf(MaDate)) + '-' + Format('%.2d', [w]));
    semble etre bon

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 744
    Points : 15 160
    Points
    15 160
    Par défaut Complément urgent :
    Le même problème se pose avec le 1er janvier !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MaDate := EncodeDate(2010, 01, 01);
    renvoie 2010-53 !

    Rajoute un autre test du même style que ce que j'ai fait.
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    c'est du n'importe quoi franchement ! MonthOftheYear de (2010,01,01) renverrais 12 alors ??

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 744
    Points : 15 160
    Points
    15 160
    Par défaut
    T'énerves pas et lis l'aide calmement, et réfléchis un peu...
    Pointeur sur WeekOfTheYear, F1, lire en bas et voilà.
    [edit]Me rend compte que tu l'as postée en citation, l'aide.
    Donc, pour répondre à ta question, goto première ligne de ce post ! [/edit]
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    je ne m'enerve pas du tout je suis juste fatigué des comportements bizarre de Delphi ...

    enfin pour revenir à nos moutons, le hic c'est que je ne comprends pas l'explication de l'aide ...

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Points : 15
    Points
    15
    Par défaut
    ah si !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function Tstruct_aff.DateToSem( DDate: TDatetime ): string;
    var
      MyYear:word;
      w: integer;
    begin
      w:=WeekOfTheYear(DDate, MyYear);
      Result := IntToStr(MyYear) + '-' + Format('%.2d', [w]);
    end;


    [edit] : voila comme ca marche ca impeccable, Merci tout le monde !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] format label resultat
    Par pilounet54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2012, 17h04
  2. Formater un resultat
    Par Ralay dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/10/2008, 07h13
  3. changer le format d'affichage des resultats
    Par Smix007 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/05/2007, 13h38
  4. Comment formater le resultat avec 2 chiffres avec SUM de SQL
    Par sondo dans le forum Bases de données
    Réponses: 15
    Dernier message: 23/06/2006, 14h41
  5. Réponses: 5
    Dernier message: 02/03/2006, 11h04

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