是否有32位系统的64位unix时间戳转换的C ++实现? 我需要将struct tm转换为64位整数,反之亦然,包括闰年,时区,UTC。 至less对于GNU / Linux和Windows,也需要它的便携性。
如何在bash脚本中存储“time”函数输出的子string
什么是CLOCK_TAI的时代?
你需要:
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粉丝。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。