Calcul de date (j+1) a partir d'une variable

Jip06 Messages postés 7 Statut Membre -  
 Super Sheep -
Bonjour,

Je voudrais ajouter un jour dans une date chargée dans une variable (sous le format ymd).
un peu comme ceci -> wdate= `date "+%d %m %y" | awk '{print $3""$2""$1+1}'` mais en utilisant non pas la fonction date comme sur ce modèle mais une variable $1 = 060823.

Je voudrais obtenir wdate=060824

Pouvez vous m'aider !

merci
Configuration: unix aix + shell KSH

7 réponses

  1. Kitof
     
    ATTENTION !

    Pour avoir utilisé le code de lami20j, dans un script, un bug très subtile s'est glissé :

    En effet, comme le décalage horaire n'est pas géré, ce script n'incrémentera jamais le jour du passage à l'heure d'hiver, car 26/10/2008 00:00:00 + 24 heures = 26/10/2008 23:00:00 !

    Solution simple puisque les heures ne sont pas gérées ici : Ajouter 25h au lieu de 24h à l'intervalle de temps.

    Voilà, si ça peut servir à l'internaute qui passera par là ;)
    3
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voilà un petit code en Perl

    La méthode utilisé est de ajouter de secondes EPOCH

    - d'abord je converti en secondes EPOCH la date qui se trouve dans la variable
    - je fait les manipulations nécessaires
    - je permet la saisie d'un nombre de jours de decalage
    - je calcule la nouvelle date en secondes EPOCH
    - je converti en date

    A toi d'adapter.
    #!/usr/bin/perl
    #
    use warnings;use strict;
    
    use Time::Local;
    
    # la date ( aammjj ) contenu dans une variable scalaire
    my $d='060824';
    my ($a,$m,$j) = unpack("A2" x (length($d)/2), $d);
    print "La date initiale : $a$m$j\n";
    
    # conversion en secondes EPOCH
    my $ed = timelocal(0,0,0,$j,$m - 1,$a);
    
    
    # Ajout d'un nombre de jours
    print "Entrez le decalage [nombre jours] : ";
    chomp(my $decalage = <STDIN>);
    my $intervalle = $decalage * 60 * 60 * 24;
    
    # calculer la nouvelle date
    my $resultat = $ed + $intervalle;
    
    # conversion de secondes EPOCH en date format aammjj
    my ($jj,$mm,$aa) = (localtime($resultat))[3,4,5];
    
    $jj = sprintf("%02d",$jj);
    $mm = sprintf("%02d",$mm + 1);
    $aa = substr(($aa + 1900),-2);
    
    my $d_res = "$d + $decalage : $aa$mm$jj";
    
    print "$d_res\n";
    __END__
    Une autre méthode pourra être l'utilisation du moduel Date::Calc du CPAN.

    lami20j
    2
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Je suis pas sûr d'avoir tout bien saisi là !!!

    Si c'est ça que tu veux (enfin, quelque chose d'approchant) :
    [jp@MDK tmpfs] $ A=23
    
    [jp@MDK tmpfs] $ B=$(expr $A + 1)
    
    [jp@MDK tmpfs] $ echo $B
    
    24
    
    [jp@MDK tmpfs] $
    Je ne pense pas que ça puisse s'adapter à ce que tu veux faire...

    ;-))
    -1
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Juste pour ta mise en forme un peu longuette, essaie ça :
    date "+%y%m%d" --date='1day'
    ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jip06 Messages postés 7 Statut Membre
     
    Ben en fait, si j'ai une variable $1 contenant la valeur '20060831' par exemple, je voudrais, en ajoutant 1 jour obtenir la valeur '20060901' .
    Il faudrait que je puisse convertir ma variable en date, ajouter 1 au jour et récupérer le résultat.

    suis-je plus clair !!!

    merci
    -1
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    shell KSH, jour+1 à partir d'une variable
    [81.255.193.xxx - smtp.organic.fr] Ajouté par Jip06
    2006-09-01 12:31:55 (GMT+2)
    Statut : En cours


    Bonjour,

    je sais, j'ai déjà posté un message à ce sujet mais je n'ai pas eu de réponse satisfaisante. Pourtant ce n'est tout de m^me pas la lune que je veux attraper.

    En KSH, comment puis-je ajouter un jour à partir d'une date issu d'un paramètre saisi (string).

    Par exemple dans le script:

    datesaisi=$1 # on recupère 060831

    # je voudrais faire +1 dans le jour et récuperer 060901
    # il faut donc que je puisse convertir le format string en format date et faire + 1 au jour mais en KSH, à priori, je ne peux faire +1 sur le jour que dans la fonction date et la fonction date n'accepte pas de constante ('060831').

    Dois-je utiliser un autre langage (comme PERL) pour arriver à mes fins ? Et comment puis-je faire ?

    Merci de votre aide, conseils, etc ...
    -1
  8. Super Sheep
     
    une autre solution peut-être plus propre serait de faire le calcul à midi au lieu de minuit...
    (en cas de chevauchement avec un changement d'heure, on passe à 11h ou 13h, mais il n'y a pas d'impact sur le jour) :

    # conversion en secondes EPOCH
    my $ed = timelocal(0,0,12,$j,$m - 1,$a);
    0