以下の様なコードの所では,VC 7 までは 2038 に対応していない.
time_t ????::Get???? (void)
{
….
time_t term = 0 ;
#if(_MFC_VER >= 0x0800)
ReadBlock(…,sizeof(__time32_t)/sizeof(WORD)) ;
__time32_t* dateBuffer = (__time32_t*)Get????Buffer() ;
__time32_t term32 = *dateBuffer ;
term = UINT(term32) ;
#else
ReadBlock(…,sizeof(time_t)/sizeof(WORD)) ;
time_t* dateBuffer = (time_t*)Get????Buffer() ;
term = *dateBuffer ;
#endif
return term ;
}
0x7fffffff までは問題ないが,2038 を超えると VC 7 の場合,-2147483648 になる.
VC 7 LocTim64.c では,以下の様になっている.
if ( (*ptime _MAX__TIME64_T) )
return( NULL );
VC 6 では,long のため範囲外(LocalTim.c など)となる.
VC 8 では,2038/01/19 と認識できる.
なんで VC 8 で #ifdef としたのか?古いことなので覚えてないが,VC 7 では一部うまくないことがあったため 2038 には対応しないとした?