Conversion de date avec AIX

Résolu
tbeghain Messages postés 63 Statut Membre -  
tbeghain Messages postés 63 Statut Membre -
Bonjour,

J'ai un AIX 6.1.
J'ai regardé les post au sujet des conversions de date, mais les solutions demandent d'utiliser une commande qui n'existe pas avec AIX :
date --date

Donc sous AIX, j'ai deux variables avec un quantième et une année (exemple 335 15 qui correspond au 1er decembre 2015). Et je veux, à partir de ce quantieme retrouver une date avec le format jj/mm/aa (pour l'exemple 01/12/15). Comme puis-je faire en shell ? Merci

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    en Perl
    $ perl -e 'use Time::Piece; my $t=Time::Piece->strptime($ARGV[0], "%j %y "); print $t->strftime("%d/%m/%y\n")' "335 15"
    01/12/15
    0
  2. tbeghain Messages postés 63 Statut Membre 3
     
    Bonjour, mais j'ai pas Perl sur mon AIX, et je n'ai pas la possibilité de le rajouter. Je cherche une syntaxe en shell et uniquement en shell s'il vous plait. Merci
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      pas en C ?
      0
      1. tbeghain Messages postés 63 Statut Membre 3 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Ben non, je ne connais pas le C.
        0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      $ cat date.c
      #include <stdio.h>
      #include <time.h>
      main(int argc, char **argv)
      {
      struct tm tm;
      char buf[128];
      strptime(argv[1],"%j %y", &tm);
      strftime(buf, sizeof(buf), "%d/%m/%y", &tm);
      printf("%s\n", buf);
      }
      $ make date
      cc date.c -o date
      $ ./date "335 15"
      01/12/15
      $
      0
  3. tbeghain Messages postés 63 Statut Membre 3
     
    Bonjour,
    Voilà ce que j'ai fait. C'est peut être pas optimum, mais ça marche. Au cas où ça pourrait intéresser quelqu'un.

    ANNEE=$1
    QUANT=$2

    if [[ $ANNEE -le 0 ]] then
    echo "Année incorrecte"
    exit
    fi

    if [[ $(($ANNEE % 4)) -eq 0 && $(($ANNEE % 100)) -ne 0 || $(($ANNEE % 400)) -eq 0 ]] then
    echo " $ANNEE est bissextile"
    BIS=1
    else
    echo "$ANNEE non bissextile"
    BIS=0
    fi

    BORNSUP=`expr 365 + $BIS`
    if [[ $QUANT -le 1 || $QUANT -gt $BORNSUP ]] then
    echo "quantieme incorrect"
    exit
    fi

    TABJOUR[1]=31
    TABJOUR[2]=`expr $BIS + 59`
    TABJOUR[3]=`expr $BIS + 90`
    TABJOUR[4]=`expr $BIS + 120`
    TABJOUR[5]=`expr $BIS + 151`
    TABJOUR[6]=`expr $BIS + 181`
    TABJOUR[7]=`expr $BIS + 212`
    TABJOUR[8]=`expr $BIS + 243`
    TABJOUR[9]=`expr $BIS + 273`
    TABJOUR[10]=`expr $BIS + 304`
    TABJOUR[11]=`expr $BIS + 334`
    TABJOUR[12]=`expr $BIS + 366`

    CPT=1

    while [[ ${TABJOUR[$CPT]} -le $QUANT ]]
    do
    CPT=`expr $CPT + 1`
    done
    echo "CPT=$CPT"
    if [[ $CPT -eq 1 ]] then
    LeJour=$QUANT
    LeMois=1
    else
    CPT2=`expr $CPT - 1`
    LeJour=`expr $QUANT - ${TABJOUR[$CPT2]}`
    LeMois=$CPT
    fi
    echo "$LeJour/$LeMois/$ANNEE"
    0