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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
30/03/08 00:20:00
isdst : 0
27/10/07 23:30:00
isdst : 1
AIX 5.3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.