Conversion de date avec AIX

Résolu/Fermé
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 - Modifié par tbeghain le 1/12/2015 à 11:41
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 - 1 déc. 2015 à 15:36
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

dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
1 déc. 2015 à 12:07
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
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 3
1 déc. 2015 à 12:14
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
dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
1 déc. 2015 à 12:28
pas en C ?
0
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 3 > dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024
1 déc. 2015 à 12:53
Ben non, je ne connais pas le C.
0
dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
Modifié par dubcek le 1/12/2015 à 13:05
$ 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
tbeghain Messages postés 58 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 22 février 2021 3
1 déc. 2015 à 15:36
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