Potřebujete:
typedef long long time64_t;
time64_t mktime64(struct tm *t);
struct tm* localtime64_r(const time64_t* t, struct tm* p);
Původně (v roce 2011) tato odpověď obsahovala odkazy na 2038bug.com, kde bylo možné stáhnout malý pivotal_gmtime_r knihovna, obsahující zmíněné funkce. Knihovna byla tehdy z 2038bug.com odstraněna, odkazy byly nefunkční a byly odstraněny z odpovědi moderátorem. Zdá se, že pivotal_gmtime_r kód nyní naleznete zde:
https://github.com/franklin373/mortage/tree/master/time_pivotal
Také jsem našel jinou, novější knihovnu s názvem y2038 , který také implementuje mktime64 a localtime64_r :
https://github.com/evalEmpire/y2038
Funkce převádějící struct tm* na time_t je mktime . Můžete najít mnoho jeho implementací, např. v Glibc a v libvxc mktime.c soubor. Můžete vzít kód (za předpokladu, že je pro vás legální, takže respektujte licence) a změnit time_t na nějaké 64bitové celé číslo jako int64_t .
Funkce provádějící ostatní konverze z time_t na struct tm* jsou localtime nebo gmtime a vy můžete udělat totéž.
Můžete však mít zásadnější problém:váš 32bitový stroj běžící v roce 2040 by měl mít nějaký způsob, jak vám poskytnout aktuální čas (jako time systémová volání ano) vhodně v 64bitové variantě time_t , a to je mnohem těžší (záleží na jádře a hardwaru).
Zdá se, že vycházíte z předpokladu, že time_t je 32bitový na 32bitových systémech a to může, ale nemusí být pravda.
V systému Windows počínaje sadou Visual Studio 2005 o velikosti time_t je 64bitový, i když kompilujete pro 32bitový Windows.
Nešťastné je, že glibc to definuje jako long int , což je na 32bitových systémech 32bitové celé číslo. To znamená, že 32bitový Linux a další 32bitové platformy založené na gcc/glibc (jako Cygwin) nebudou moci pracovat s 64bitovými časovými razítky.
Pokud vaše aplikace musí běžet na 32bitovém glibc, měli byste použít své vlastní konverzní funkce, což by mohly být stejné funkce v knihovně C překompilované pro použití 64bitových časových razítek.
Pokud potřebujete zdrojový kód s permisivní licencí (BSD), můžete se na tyto funkce podívat v minix3. Zde je místní čas. Zdroj je opatřen hypertextovým odkazem, takže ostatní snadno najdete.