是否有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_t
到struct tm*
的其他转换的函数是localtime
或gmtime
,您也可以这样做。
然而,你可能有一个更基本的问题:你在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粉丝。