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

Langage Perl Discussion :

comment comparer deux date


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut comment comparer deux date
    salut,

    Comment pourrai-je faire en perl,
    pour comparer deux date ?
    Je souheterais comparer une date que je recupere de ma base de donnée au format "DD/MM/YYYY HH24:MI:SS" avec une date au meme format;
    j'utilise le module Posix pour recuperer la date et l'heure du jour

    J'ai fait cela mais ça ne fonctionne pas

    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
    use strict;
    use warnings;
    use English;
    use POSIX qw(strftime);
     
    my $madate1             = strftime( '%d/%m/%Y %H:%M:%S', localtime );
    my $madate='22/10/2012 12:00:00';
     
    if ($madate <= $madate1)
    {
    print "ok\n";
    }
    else
    {
    print "ko\n";
    }
    est-ce que vous auriez une idée ?

    Merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je te conseillerais bien d'essayer DateTime.
    Je suppose que la date provient d'une source extérieure ? (Sinon tu peux la rentrer dans un format plus adapté) DateTime::Format::Strptime est capable de parser tout ce que strftime est capable de formater.

    --
    Jedaï

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 319
    Points : 80
    Points
    80
    Par défaut
    j'ai deux questions
    est-ce possible de le faire sans ajouter de module perl ?

    et j'ai essayer avec un module

    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
     
    #!/usr/bin/perl -w
     
     
    use strict;
    use warnings;
    use English;
    use POSIX qw(strftime);
    #use Date::Calc qw(:all);
    use Date::Manip;
     
    my $madate1             = strftime( '%d/%m/%Y %H:%M:%S', localtime );
     
    my $madate ='22/10/2012 12:00:00';
     
    my $flag = Date_Cmp($madate1,$madate);
      if ($flag<0) {
        # date1 is earlier
        print "$madate1 est inferieur $madate\n";
      } elsif ($flag==0) {
        # the two dates are identical
        print "$madate1 est egal $madate\n"
      } else {
        # date2 is earlier
        print "$madate1 est superieur $madate\n";
      }
    j'ai ce message d'erreur :

    ERROR: Date::Manip unable to determine TimeZone.
    at C:/Perl/site/lib/Date/Manip.pm line 3635
    Date::Manip:ate_TimeZone called at C:/Perl/site/lib/Date/Manip.pm line
    676
    Date::Manip:ate_Init() called at C:/Perl/site/lib/Date/Manip.pm line 7
    99
    Date::Manip:arseDateString('25/04/2007 17:19:51') called at C:/Perl/si
    te/lib/Date/Manip.pm line 1494
    Date::Manip:ate_Cmp('25/04/2007 17:19:51', '22/10/2012 12:00:00') call
    ed at C:\Documents and Settings\melvine\Bureau\test\Date1.pl line 15

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Melvine
    j'ai deux questions
    est-ce possible de le faire sans ajouter de module perl ?
    Oui, par exemple tu parses à la main et tu utilises Time::Local (c'est un module mais il est en standard, donc je ne pense pas que ça te gène), ça donnerais un truc comme ça :
    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
    use Time::Local;
     
    sub parseDate {
      my $date = shift;
      if( $date =~ m{(\d{1,2})/(\d{1,2})/(\d{4}) \s+
          (\d{1,2}):(\d{1,2}):(\d{1,2})}x) {
        return timelocal($6, $5, $4, $1, $2 - 1, $3);
      } else {
        die "$date unparseable.\n";
      }
    }
     
    cmpDate {
      my ($date1, $date2) = @_;
      return parseDate($date1) <=> parseDate($date2);
    }
    Mais ceci est un code fragile, peu flexible, peu extensible...
    Si tu penses que tu vas faire d'autres calculs de date, utilise un module si possible, et plutôt un module comme DateTime qui est cohérent dans son approche (Date::Manip est puissant, mais laid et incohérent).

    --
    Jedaï

Discussions similaires

  1. comment compare deux date
    Par kanebody dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/09/2009, 00h33
  2. comment comparer deux dates
    Par smix13 dans le forum IHM
    Réponses: 1
    Dernier message: 26/01/2009, 14h37
  3. Comment comparer deux date en SQL Server avec VB.NET
    Par Pedro Varela dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/09/2006, 15h26
  4. Comment comparer deux dates
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 01/09/2005, 18h24
  5. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

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