Bug anno 2038

Il problema
Sistemi operativi
Applicazioni
Soluzioni
Collegamenti

Il problema


Il bug dell'anno 2038 (YEAR-2038) è simile al bug dell'anno 2000 (Y2K) in quanto coinvolge un problema di spostamento temporale non gestito dai programmatori.
Il bug colpisce tutti quei sistemi operativi e programmi scritti in C che utilizzano il tipo dati time_t per memorizzare le date. Generalmente infatti questo tipo dati utilizza uno spazio di 30 bit per memorizzare data e ora, rappresentate come differenza dalla data iniziale del 1/1/1970.
In questo modo la massima data rappresentabile in un numero di 30 bit è martedì 19 gennaio 2038 alle ore 03:14:07.
Quindi la data esatta in cui si verificherà il BUG è venerdì 19 gennaio 2038 alle ore 03:14:07.
Probabilmente nel 2038 non si verificheranno problemi dal momento che il BUG sarà già stato ampiamente risolto.

Ciò però non deve trarre in inganno in quanto il BUG coinvolge putroppo già da ora molte applicazioni (scritte per sistemi con architettura a 32 bit) che utilizzano date che si spingono in avanti nel tempo di 30 anni come ad esempio le scadenze degli strumenti finanziari.

Segue un banale esempio di codice standard "C" che dimostra il BUG :
 
	#include <stdlib.h>
	#include <stdio.h>
	#include <unistd.h>
	#include <time.h>
	
	int main (int argc, char **argv)
	{
		time_t t;
		
		t = (time_t) 1000000000;
		printf ("%d, %s", (int) t, asctime (gmtime (&t)));
		
		t = (time_t) (0x7FFFFFFF);
		printf ("%d, %s", (int) t, asctime (gmtime (&t)));
		
		t++;
		printf ("%d, %s", (int) t, asctime (gmtime (&t)));
		
		return 0;
	}
		

Risultato dell'esecuzione del programma:

 
1000000000, Sun Sep  9 01:46:40 2001
2147483647, Tue Jan 19 03:14:07 2038
-2147483648, Fri Dec 13 20:45:52 1901

Sistemi operativi


Windows

Tutti
Windows CE

Unix

Linux
Solaris
AIX
Mac OsX

Applicazioni

Soluzioni


Per le applicazioni su sistemi Windows 32 bit utilizzare la classe COleDateTime e ricompilare l'applicazione.

Collegamenti


Sito 2038bug.com
Wikipedia