Conversion de date avec AIX

Résolu
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. 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"
    1. 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
      1. Contributeur
        pas en C ?
      2. @dubcekBen non, je ne connais pas le C.
      3. Contributeur
        $ 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
        $
    2. Contributeur
      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