Conversion de date avec AIX [Résolu/Fermé]

Signaler
Messages postés
56
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
9 avril 2019
-
tbeghain
Messages postés
56
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
9 avril 2019
-
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

Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
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
Messages postés
56
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
9 avril 2019
2
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
dubcek
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
pas en C ?
tbeghain
Messages postés
56
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
9 avril 2019
2 > dubcek
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020

Ben non, je ne connais pas le C.
dubcek
Messages postés
18075
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
27 février 2020
4 649
$ 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
$
Messages postés
56
Date d'inscription
mercredi 31 mars 2004
Statut
Membre
Dernière intervention
9 avril 2019
2
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"