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 :

conversion de date


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut conversion de date
    Salut tout le monde, j'ai écrit une fonction qui devrait me permettre de convertir une date format JJ-MM-AAAA en nombre de secondes depuis 1/1/1970, la voici :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    sub getUnixDate {
    	my ($date) = @_;
    	my (@date) = split(m:-:,$date);
    	my ($jour, $mois, $annee) = @date;
    	my @jours_valides = (31,28,31,30,31,30,31,31,30,31,30,31);
    	my $nbSec;
    	my $anneeBissextile;
     
    	my $nbJour = $jours_valides[$mois] - $jour;
    	my $nbMois = $mois - 1;
    	my $nbAnnee = $annee - 1970;
     
    	$nbSec = $nbJour * 24 * 60 * 60;
     
    	for(my $i = 1;$i <= $nbMois;$i++) {
    		nbSec = nbSec + ($jours_valides[$i] * 24 * 60 * 60);
    	}
     
    	for(my $annee = 1970;$annee <= $nbAnnee;$annee++) {
     
    		if($annee % 400 == 0) { $anneeBissextile = 1; }
    		elsif($annee % 100 == 0) { $anneeBissextile = 0; }
    		elsif($annee % 4 == 0) { $anneeBissextile = 1; }
    		else { $anneeBissextile = 0; }
     
    		if ($anneeBissextile) { $jours_valides[1] = 29; }
    		else { $jours_valides[1] = 28; }
     
    		for(my $i = 1;$i <= 12;$i++) {
    			nbSec = nbSec + ($jours_valides[$i] * 24 * 60 * 60);
    		}
    	}
     
    	return $nbSec;
    }
    malheureusement, à l'exécution, j'ai l'erreur suivante :

    Can't modify constant item in scalar assignment at /var/www/intranet/Intrascript/SYSGISI//Fusagx_lib_sysgisi.pm line 87, near ");"
    la ligne 87 est la ligne contenue dans la première boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(my $i = 1;$i <= $nbMois;$i++) {
    		nbSec = nbSec + ($jours_valides[$i] * 24 * 60 * 60);
    	}
    est-ce que vous voyez d'où pourrait venir le problème ?

    un grand merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    nbSec = nbSec
    il ne manque pas des $??

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    effectivement ... honte à moi

    va falloir que je lache un peu l'écran parce que ça ne va plus trop ...

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 33
    Par défaut
    maintenant ça fonctionne mieux mais il me reste encore quelques petits problèmes de calculs ... mais je te remercie quand même

  6. #6
    Expert confirmé
    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
    Par défaut
    Tu devrais utiliser le pragma "strict", il aurait repéré cette erreur à la compilation et t'aurait donné un meilleur diagnostic ("bareword word "nbSec" was found on..." ou un truc comme ça). Par ailleurs tu as l'air de vouloir récupérer un timestamp à partir d'une date, dans ce cas tu devrais utiliser Time::Local::timelocal() qui est distribué en standard avec Perl et n'a pas d'erreur de calcul (tu t'es embrouillé avec tes $annee et $nbAnnee dans ta boucle for(), sans parler du fait que si l'année de la date est bissextile, ce n'est pas pris en compte dans ta première boucle sur les mois).

    --
    Jedaï

Discussions similaires

  1. Conversion de date
    Par jdu dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2005, 16h17
  2. Conversion de dates
    Par Gogoye dans le forum Modules
    Réponses: 5
    Dernier message: 10/08/2004, 11h39
  3. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  4. Conversion de date lors d'un import
    Par bilbon.S dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/03/2004, 14h33
  5. Conversion de date et division 64 bits
    Par dway dans le forum Assembleur
    Réponses: 38
    Dernier message: 27/01/2004, 10h31

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