AIX : fonction localtime, timezone, variable TZ
Bonjour à tous,
sur deux machines de production sous IBM AIX (l'une en 5.2 l'autre en 5.3), le code C suivant ne donne pas le même résultat, ce qui est catastrophique car cela induit d'autres problèmes. Voici le problème résumé en quelques lignes de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h>
#include <stdlib.h>
#include <time.h>
void affiche ( time_t iNbSec )
{
struct tm *tmPt = NULL ;
tmPt = localtime ( &iNbSec );
tmPt->tm_mon += 1;
tmPt->tm_year -= 100;
printf( "%2.2d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d\n", tmPt->tm_mday, tmPt->tm_mon ,tmPt->tm_year,tmPt->tm_hour, tmPt->tm_min, tmPt->tm_sec );
printf( "isdst : %d\n", tmPt->tm_isdst );
}
int main ()
{
affiche( 1206832800 );
affiche( 1193520600 );
return 0;
} |
Voici les résultats :
AIX 5.2 :
Code:
1 2 3 4
| 30/03/08 00:20:00
isdst : 0
27/10/07 23:30:00
isdst : 1 |
AIX 5.3 :
Code:
1 2 3 4
| 30/03/08 00:20:00
isdst : 0
27/10/07 22:30:00
isdst : 0 |
Pourtant, la variable TZ est identique sur les deux machines !
La définition de TZ dans /etc/environment est identique sur les deux machines, et un "smit" > "System Environments" > "Change / Show Date and Time" > "Change Time Zone" donne :
AIX 5.2 :
Code:
1 2 3 4 5 6 7 8 9
| * Standard Time ID(only alpahabets) [NFT]
* Standard Time Offset from CUT([+|-]HH:MM:SS) [-1]
Day Light Savings Time ID(only alpahabets) [DFT]
Day Light Savings Time Offset from CUT([+|-]HH:MM: []
SS)
Start Daylight Savings Day([Mmm.ww.dd|Jn]) [M3.5.0]
Start Daylight Savings Time(HH:MM:SS) [02:00]
Stop Daylight Savings Day([Mmm.ww.dd|Jn]) [M10.5.0]
Stop Daylight Savings Time(HH:MM:SS) [03:00] |
AIX 5.3 :
Code:
1 2 3 4 5 6 7 8 9
| * Standard Time ID(only alpahabets) [NFT]
* Standard Time Offset from CUT([+|-]HH:MM:SS) [-1]
Day Light Savings Time ID(only alpahabets) [DFT]
Day Light Savings Time Offset from CUT([+|-]HH:MM: []
SS)
Start Daylight Savings Day([Mmm.ww.dd|Jn]) [M3.5.0]
Start Daylight Savings Time(HH:MM:SS) [02:00]
Stop Daylight Savings Day([Mmm.ww.dd|Jn]) [M10.5.0]
Stop Daylight Savings Time(HH:MM:SS) [03:00] |
De plus, il y a un effet de bord sur l'utilisation de la fonction "localtime" dans cet exemple. Si je ne fais que le second "affiche", il n'y a pas de différence entre les deux machines !!
Auriez-vous une idée, une piste, une solution ?
Merci.