64位unix时间戳转换

Ada*_*hon 10 c++ linux windows time 64-bit

是否有针对32位系统的64位unix时间戳转换的C++实现?我需要转换struct tm为64位整数,反之亦然,包括闰年,时区,UTC.还需要它可移植,至少对于GNU/Linux和Windows.

Ale*_*kov 11

你需要:

typedef long long time64_t; 
time64_t mktime64 (struct tm *t); 
struct tm *localtime64_r (const time64_t *t, struct tm *p);
Run Code Online (Sandbox Code Playgroud)


Bas*_*tch 7

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

从做其他转换功能time_tstruct tm*localtimegmtime,你可以这样做.

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


Mig*_*uel 6

您似乎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中查看这些函数.是当地时间.源是超链接的,因此您可以轻松找到其他源.