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)
将a转换struct tm*
为a 的函数time_t
是mktime
.您可以找到它的许多实现,例如.在Glibc和libvxc的mktime.c
文件中.您可以获取代码(假设它是合法的,所以请尊重许可证)并更改time_t
为大约64位整数int64_t
.
从做其他转换功能time_t
来struct tm*
是localtime
或gmtime
,你可以这样做.
但是,您可能有一个更基本的问题:在2040年运行的32位机器应该有一些方法可以time
在64位变量中适当地给出当前时间(如系统调用所做的那样)time_t
,这样会更难(它取决于内核和硬件).
您似乎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中查看这些函数.这是当地时间.源是超链接的,因此您可以轻松找到其他源.
归档时间: |
|
查看次数: |
13594 次 |
最近记录: |