KioskeaKioskeaCommentCaMarcheInscrivez-vous, c'est gratuit !
Mardi 20 mai 2008 - 20:47:22

[PERL]-Trouver le jour d'une date donnée

Rechercher : dans
[PERL]-Trouver le jour d'une date donnée
par blux
 Fil de Discussions
Statut : Non résolu
jeudi 18 mai 2006 à 14:52:22
Salut,

je cherche comment trouver en perl le jour de la semaine d'une date donnée...

ex : le 17/05/06 est un Mercredi...

Je sais faire l'opération à partir de la date d'aujourd'hui avec
my ($secondes, $minutes, $heures, $jour_mois, $mois,
    $an, $jour_semaine, $jour_calendaire, $heure_ete) = localtime(time);

Mais je ne sais pas passer en paramètre de localtime une date précise...

Quelqu'un pourrait m'éclairer ?

Merci par avance.
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par blux, le jeudi 18 mai 2006 à 16:03:25 Fil de Discussions
Et je n'ai pas les modules CPAN de date, je ne peux pas non plus les installer...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 18 mai 2006 à 17:30:07 Fil de Discussions
Salut,

Mais je ne sais pas passer en paramètre de localtime une date précise...

c'est normal que tu ne peux pas.

quand tu fait localtime(time) tu n'as pas en argument une date précise mais la conversion de cette date en secondes Epoch, c'est ça que fait la fonction time.


En bref tu peux le faire manuellement avec une date de la façon suivante.

1. Tu transformes la date en secondes Epoch

utilisation du module standard Time::Local et les fonctions timelocal et/ou timegm

use Time::Local

#jours 1-31
#mois 1-12
#année sur 4 chiffres
my $time = timelocal($sec, $min, $h, $d, $m-1, $y-1900);


2. Tu passes en argument à localtime ce que tu obtiens au point 1.

my ($secondes, $minutes, $heures, $jour_mois, $mois,$an) = localtime($time);


lami20j
Répondre à lami20j

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le jeudi 18 mai 2006 à 17:35:41 Fil de Discussions
Re,

je cherche comment trouver en perl le jour de la semaine d'une date donnée...

Vu que tu n'as pas accès au modules Cpan peut être vaut mieux créer une fonction.

lami20j
Répondre à lami20j

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par blux, le vendredi 19 mai 2006 à 10:49:38 Fil de Discussions
Merci bien, ça marche.

En fait le jour, je sais le retrouver avec le champ $jour_semaine de localtime...

Ce que je ne savais pas, c'était convertir une date quelconque en secondes epoch...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
Répondre à blux

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Dom', le vendredi 18 août 2006 à 19:56:59 Fil de Discussions
Bonjour

Je souhaite convertir sous PERL la chaine de caractères suivante (format date UNIX) 'Fri Aug 18 04:15:27 2006'
au format chaine de caractère suivant 'YYYY-MM-DD HH:MI:SS'

Merci pour votre aide!

Dom'
Répondre à Dom'

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le vendredi 18 août 2006 à 20:42:31 Fil de Discussions
Salut,

#!/usr/bin/perl
#
use warnings;use strict;

# en utilisant la fonction localtime
# 
my ($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();

$mois += 1 and $annee += 1900;
$jour = sprintf("%02d",$jour);
$mois = sprintf("%02d",$mois);
my $d0 = "$annee-$mois-$jour $heure:$min:$sec";
print $d0,"\n";

# en utilisant la commande date (plus simple)
# je stocke dans la variable $d1
# en utilisant `` (apostrophes enverses)
# 
my $d1 = `date '+%Y-%m-%d %H:%M:%S'`;
print $d1,"\n";

__END__
Il y a des modules sur CPAN pour gérer les dates
lami20j
Répondre à lami20j

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par dom', le vendredi 18 août 2006 à 22:39:15 Fil de Discussions
Salut,

Merci pour le tuyau, mais mon problème c'est que je dois passer la date à formater en paramètre et qui n'est pas la date courante d'UNIX...
Comment faire ?

Merci

Dom'
Répondre à dom'

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le vendredi 18 août 2006 à 23:42:05 Fil de Discussions
Re,

#!/usr/bin/perl
#
use warnings;use strict;

use Time::Local;

my $date = 'Fri Aug 18 04:15:27 2006';

$date =~ /\w+\s*(\w{3})\s*(\d\d?)\s*(\d\d):(\d\d):(\d\d)\s*(\d{4})/;

# à modifier le hash ( les clés ) si besoin
my %mois = (
            jan => '0',
            fev => '1',
            mar => '2',
            avr => '3',
            mai => '4',
            jui => '5',
            jul => '6',
            aug => '7',
            sep => '8',
            oct => '9',
            nov => '10',
            dec => '11',
);

my $d1 = timelocal ($5,$4,$3,$2,$mois{lc($1)},$6);
my ($s,$m,$h,$j,$mm,$a) = localtime($d1);

$mm +=1 and $a += 1900;

$j = sprintf("%02d",$j);
$mm = sprintf("%02d",$mm);

$s = sprintf("%02d",$s);
$m = sprintf("%02d",$m);
$h = sprintf("%02d",$h);

print "$a-$mm-$j $h:$m:$s\n";

__END__
J'ai fait à la main le formatage

Il y a le module Date:Manip sur CPAN
Voir la fonction ParseDate
lami20j
Répondre à lami20j

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le samedi 19 août 2006 à 09:11:52 Fil de Discussions
Salut,

et voilà la même chose avec le module Date::Manip (que tu dois le télécharger depuis le CPAN
http://search.cpan.org/~sbeck/DateManip-5.44/Manip.pod et ensuite l'installer (voir le fichier INSTALL)
#!/usr/bin/perl
#
use warnings;use strict;

# utilisation de module Date::Manip
#
use Date::Manip qw(UnixDate);

# date à convertire dans le format  'YYYY-MM-DD HH:MI:SS' 
my $date = 'Fri Aug 18 04:15:27 2006';

# la conversion
my $res_d = UnixDate($date,"%Y-%m-%d %H:%M:%S");

# l'affichage
print $res_d,"\n";
lami20j

__END__
Répondre à lami20j

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par dom', le samedi 19 août 2006 à 11:26:41 Fil de Discussions
Salut lami20j ,

Merçi pour tous ces bouts de code...avec ça je devrais arriver à m'en sortir ...quand les admins UNIX auront installé le module DateTime et recompilé le kernel PERL ...
C'est pas un module de natif dans PERL , on peut aller chercher ce module où ?

Merci encore

Dom'
Répondre à dom'

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par lami20j, le samedi 19 août 2006 à 11:53:29 Fil de Discussions 
Salut,

il faut voir la version de Perl que tu as
perl -v
Normalement Time::Local est un module standard.

Les modules sont des fichiers avec l'extension .pm.
Les répertoires contenant les modules on les trouves dans le tableau spécial @INC.
perl -e '$,="\n" and print @INC'
Si on veut utiliser nos propres modules on peut utiliser le pragma use lib pour la manipulatin de @INC.

J'ai utilisé le module Date::Manip et pas DateTime .

En fait il faut comprendre la syntaxe Date::Manip.

Date::Manip veut dire qu'il y a un répertoire Date dans un des chemins que @INC contient et que dans ce répertoire il y a le fichier Manip.pm.

C'est pas un module de natif dans PERL , on peut aller chercher ce module où ?


perl trouver le jour d une date donnee#9


Dans mes messages je t'ai parlé de CPAN (Comprehensive Perl Archive Network)
http://www.cpan.org/
pour recherche des modules http://search.cpan.org/

Date::Manip http://search.cpan.org/search?query=date&mode=all


lami20j

P.S. dans le script perl trouver le jour d une date donnee#8

avec la regex je prend ce que j'ai besoin pour convertir la date en secondes EPOCH et ensuite les secondes EPOCH en date avec ton format.

Testé avec perl, v5.8.4 built for i386-linux-thread-multi
Répondre à lami20j
Discussions pertinentes trouvées dans le forum
18/05 14h52[PERL]-Trouver le jour d'une date donnéeLinux/Unix19/08 11h5311
21/04 23h46affiche le jour d'une date donnéeWindows01/06 17h412
17/03 11h56trouver la date de naissanceBureautique17/03 12h145
07/02 20h27ou trouver le date de 1er mise en circulationDroit/Libertés07/02 22h337
21/01 17h19[PERL] trouver un fichierProgrammation23/01 09h213
Plus de discussions sur « perl trouver le jour d une date donnee » Discussion en cours Discussion fermée Problème résolu
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide