64位unix时间戳转换

是否有32位系统的64位unix时间戳转换的C ++实现? 我需要将struct tm转换为64位整数,反之亦然,包括闰年,时区,UTC。 至less对于GNU / Linux和Windows,也需要它的便携性。

你需要:

 typedef long long time64_t; time64_t mktime64 (struct tm *t); struct tm *localtime64_r (const time64_t *t, struct tm *p); 

struct tm*转换为time_t的函数是mktime 。 你可以找到它的很多实现,例如。 在Glibc和libvxc的mktime.c文件中 。 你可以把代码(假设它是合法的,所以请尊重许可证),并将time_t更改为64位整数,如int64_t

执行从time_tstruct tm*的其他转换的函数是localtimegmtime ,您也可以这样做。

然而,你可能有一个更基本的问题:你在2040年运行的32位机器应该有一些方法在time_t的64位变量中给出当前时间(如系统调用所做的那样),这是很多更难(这取决于内核和硬件)。

您似乎假设time_t是32位系统上的32位,这可能是也可能不是这样。

在Windows上,从Visual Studio 2005开始, time_t的大小是64位,即使在编译32位Windows时也是如此。

不幸的是,glibc将它定义为long int ,在32位系统上它是一个32位整数。 这意味着基于gcc / glibc(如Cygwin)的32位Linux和其他32位平台将无法使用64位时间戳。

如果您的应用程序必须在32位glibc上运行,那么您应该使用自己的转换函数,这可能与C库中的相同函数重新编译为使用64位时间戳。

如果您需要使用许可证(BSD)的源代码,那么您可以在minix3中查看这些函数。 这是本地时间。 源超链接,所以你可以很容易地找到其他人。

是的,使用stuct tm *_localtime64 ( const __time64_t *timer);

这就是如果你的Windows粉丝。