我正在将一些代码从 vc120 迁移到 vc140,我遇到了 ftime64 的问题。该问题类似于Visual Studio 开发社区中提到的问题,其中 ftime64 在 2015/2017 年似乎有一个2038 年的错误,但 2013 年没有。
这是一些示例代码:
#include "stdafx.h"
#include <sys/timeb.h>
int main()
{
__timeb64 testTime64;
_ftime64(&testTime64);
printf("%lld\n", testTime64.time);
return 0;
}
对于 2038 年 1 月 19 日 03:14:07 UTC 之后的日期,时间似乎超过了 32 位边界。
要进行测试,请将上述代码编译为 ftime_check 并从管理员命令提示符运行以下命令(请注意,您的数字会因时钟上的时间而异):
date 1/18/2038 && ftime_check
2147474668
date 1/20/2038 && ftime_check
-2147319812
作为参考,这里是在 vc120 下看到的(预期的)输出:
date 1/18/2038 && ftime_check
2147482944
date 1/20/2038 && ftime_check
2147655752
我发现所有这些函数 ftime、_ftime、_ftime64、_ftime_s 和 _ftime64_s 都存在相同的问题
有没有其他人遇到过这种情况,你是如何解决这个问题的?