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

Programmation et administration système Perl Discussion :

Equivalent de l'objet DateTime


Sujet :

Programmation et administration système Perl

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut Equivalent de l'objet DateTime
    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.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    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/


  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    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

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    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

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    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 :
    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";
    Merci

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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 à :
    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";
    Dans la réalité, je note deux différences :
    - 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

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    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..
    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é
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_ALL, "fr");
    plus la lecture de cette page http://perl.enstimac.fr/DocFr/perllocale.html rien n'y fait

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. equivalent de l'objet c "FILE"
    Par Krishna dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 26/10/2008, 22h01
  2. equivalent multibox pour objet
    Par robocop2776 dans le forum Struts 1
    Réponses: 5
    Dernier message: 23/10/2007, 14h20
  3. [GD] Impossible de créer un objet DateTime
    Par gege2061 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 28/08/2007, 14h16
  4. Format Objet DateTime
    Par rafiq25 dans le forum C#
    Réponses: 3
    Dernier message: 11/05/2007, 16h31
  5. [C#] Création d'un objet dateTime
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 17
    Dernier message: 29/06/2006, 09h37

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