Bonjour,
J'aimerais savoir s'il y a un équivalent à l'objet DateTime.
Je n'arrive pas à l'installer 2 dépendances sur Solaris10, tel que : PathTools-3.33
et ExtUtils-CBuilder-0.2703
Merci de votre aide.
Bonjour,
J'aimerais savoir s'il y a un équivalent à l'objet DateTime.
Je n'arrive pas à l'installer 2 dépendances sur Solaris10, tel que : PathTools-3.33
et ExtUtils-CBuilder-0.2703
Merci de votre aide.
Personnellement, pour les dates, j'utilise les quelques fonctions disponibles dans POSIX (module du Core) : strftime, mktime.
Ca me suffit la plupart du temps.
Il n'y a pas d'interface objet.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Merci Philou,
Mais dans ce cas je ne pourait pas utiliser mon qui me converti mes shadwoExpire en date
=> http://www.developpez.net/forums/d1005819/autres-langages/perl/programmation-administration-systeme/conversion-shadowexpire-date/
Je ne comprends pas où est ton problème, ni ce que tu souhaites faire exactement (je ne connais pas le shadowexpire, qui n'a visiblement lien avec perl).
En utilisant mktime correctement (il faut fournir les paramètres comme décrit dans la doc, à savoir, l'année comme un nombre d'année depuis 1900 et le mois de 0 à 11 (à adapter depuis la saisie réalisée), il est possible d'utiliser le résultat fourni par cette fonction pour faire des calculs sur les dates, et reconvertir le résultat en date avec strftime :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 use POSIX qw(mktime strftime); my $date = <STDIN>; my ($jour, $mois, $annee) = split m{/}, $date; $mois--; $annee -= 1900; $maintenant = mktime(0, 0, 0, $jour, $mois, $annee); $demain = $maintenant + 86400; print strftime "Demain sera : %D %T\n", localtime($demain);
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Mon problème est que je n'ai pas encore le bon reflexe de faire des recherches sur internet sur les commande PERL
J'ai aussi trouvé ceci : http://www.adp-gmbh.ch/perl/posix/convert_time.html
Merci
Je t'ai donné un exemple d'utilisation et de calcul. Répondais-il à ta demande ?
Pour l'aide sur les commandes, rien de tel que perldoc -f (en ligne de commande et en anglais).
Pour la version française, le site des traductions semble à nouveau opérationnel : http://perl.enstimac.fr/DocFr/perlfunc.html
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
En fait mon soucis etait que je voulais installer un objet qui avait résolu un problème antérieure en facilitant l'écriture de mon script......
Débutant en PERL je ne connais pas bien le POSIX, c'est pour cela que je me tourne sur les objets du CPAN qui m'ont déjà bien aidé par le passé..... Je ne sais pas si tous les débutants sont passés par là en tout cas voici ma petite expérience
Encore Merci
Le CPAN est une bibliothèque de modules (dont certains disposent d'une interface objet, d'autres d'une interface fonctionnelle, et d'autres enfin, des deux).
POSIX est un module parmi d'autres, et fait à la fois partie du CPAN, et du Core de perl (c'est à dire de la distribution standard de perl). Ceci fait qu'il est largement répandu.
POSIX est également un ensemble d'API des standards Unix. C'est pour cela qu'une partie de la documentation perl sur POSIX se trouve dans les pages de manuel Unix/Linux et C.
Pour connaitre le contenu de l'API POSIX : perldoc POSIX
Les autres modules de date du CPAN sont de plus haut niveau, et conviennent également. Il faut juste bien lire la documentation pour les utiliser
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
D’après les conseils de Philou et de petites recherche sur le net mon script pour trouver la date du shadowExpire devient comme ceci :
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #!/usr/bin/perl use strict; use warnings; use POSIX qw(mktime strftime); print "Entrez le Shadowexpire :\n"; my $daysSince1970 = <STDIN>; my $unix_expire = mktime (0, 0, 0, $daysSince1970, 0, 70); print "$unix_expire\n"; my $readable_time = localtime($unix_expire); print "$readable_time\n";
Euh... je suis vraiment surpris là ... car si $daysSince1970 contient un nombre de jour depuis EPOCH (1er janvier 1970 00:00), il me semble que mktime ne devrait pas fonctionner, puisque mktime admet comme 4e paramètre un nombre de jour dans le mois, soit au maximum 31 jours.
Cependant, je vois qu'il fonctionne malgré tout.
Cela dit, il y a sans doute encore plus simple. Si tu possèdes en entrée le nombre de jour depuis EPOCH (1er janvier 1970 00:00), tu devrais pouvoir simplement le convertir en secondes pour obtenir une date numérique comme celle fournie par mktime (donc sans utiliser mktime).
Ainsi, ton script devrait être équivalent à :
Dans la réalité, je note deux différences :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #!/usr/bin/perl use strict; use warnings; print "Entrez le Shadowexpire :\n"; my $daysSince1970 = <STDIN>; my $unix_expire = $daysSince1970 * 86400; print "$unix_expire\n"; my $readable_time = localtime($unix_expire); print "$readable_time\n";
- la première est que ton code fourni le 31 décembre 1969 si l'on entre 0 jours depuis 1970, ce qui décale en fait de 1 jour par rapport à la réalité (c'est lié au fait que le 4e paramètre de mktime admet une valeur de 1 à 31, ce n'est pas un nombre de jour, mais un jour calendaire de 1 à 31).
- la deuxième est que localtime décale de 1h par rapport à gmtime (voire 2h si l'heure d'été est programmée).
Il est donc préférable, selon moi, de ne pas utiliser mktime dans ton cas, mais simplement multiplier par le nombre de secondes dans un jour (86400), et d'utiliser gmtime pour être sur que la référence temporelle constante dans le temps (pas de prise en compte des heures d'été). Mais sur ce dernier point, c'est à voir avec ton besoin.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Parce qu'il y a l'année 70 à la position de l'année dans le mktime. Sinon il aurait commencer depuis 1900.
C'est vrai que mon script me donne la date moins un jours, c'est donc que la partie jour de mktime commence à zéro.
En tout cas merci pour la correction, j'ai pu relever mes erreurs.
Par contre j'ai toujours la date en anglais une petite suggestion peut être
J'ai essayéplus la lecture de cette page http://perl.enstimac.fr/DocFr/perllocale.html rien n'y fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part setlocale(LC_ALL, "fr");
Attention cependant, car localtime (la version qui retourne une date sous forme de texte) n'est pas "locale dependant", c'est à dire qu'elle ne s'adapte pas à la locale.
Il faut pour cela que tu utilises strftime du module POSIX.
Plus j'apprends, et plus je mesure mon ignorance (philou67430)
Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
Si c'est utile, say
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager