Hai bisogno di:
typedef long long time64_t; 
time64_t mktime64(struct tm *t); 
struct tm* localtime64_r(const time64_t* t, struct tm* p);
 Originariamente (nel 2011) questa risposta conteneva link a 2038bug.com dove era possibile scaricare il piccolo pivotal_gmtime_r libreria, contenente le funzioni citate. La libreria è stata rimossa da 2038bug.com allora, i collegamenti si sono interrotti e sono stati rimossi dalla risposta da un moderatore. Sembra quel pivotal_gmtime_r il codice può ora essere trovato qui:
https://github.com/franklin373/mortage/tree/master/time_pivotal
 Inoltre, ho trovato un'altra libreria più recente, chiamata y2038 , che implementa anche mktime64 e localtime64_r :
https://github.com/evalEmpire/y2038
 La funzione che converte un struct tm* a un time_t è mktime . Puoi trovarne molte implementazioni, ad es. in Glibc e in mktime.c di libvxc file. Potresti prendere il codice (supponendo che sia legale per te, quindi per favore rispetta le licenze) e cambia time_t a qualche numero intero a 64 bit come int64_t .
 Le funzioni che eseguono le altre conversioni da time_t a struct tm* sono localtime o gmtime e potresti fare lo stesso.
 Tuttavia, potresti avere un problema più fondamentale:la tua macchina a 32 bit in esecuzione nell'anno 2040 dovrebbe avere un modo per darti l'ora corrente (come time system call lo fa) in modo appropriato nella variante a 64 bit di time_t , e questo è molto più difficile (dipende dal kernel e dall'hardware).
 Sembra che tu stia supponendo che time_t è a 32 bit su sistemi a 32 bit, e questo può o non può essere vero.
 Su Windows, a partire da Visual Studio 2005 la dimensione di time_t è a 64 bit, anche quando compili per Windows a 32 bit.
 La parte sfortunata è che glibc lo definisce come long int , che nei sistemi a 32 bit è un numero intero a 32 bit. Ciò significa che Linux a 32 bit e altre piattaforme a 32 bit basate su gcc/glibc (come Cygwin) non saranno in grado di funzionare con timestamp a 64 bit.
Se la tua applicazione deve essere eseguita su glibc a 32 bit, dovresti utilizzare le tue funzioni di conversione, che potrebbero essere le stesse funzioni nella libreria C ricompilate per utilizzare timestamp a 64 bit.
Se hai bisogno di un codice sorgente con una licenza permissiva (BSD), puoi guardare queste funzioni in minix3. Ecco l'ora locale. La fonte è un collegamento ipertestuale, quindi puoi trovare facilmente gli altri.