【发布时间】:2017-06-20 22:46:03
【问题描述】:
我正在将一些代码从 vc120 迁移到 vc140,但我遇到了 ftime64 的问题。这个问题类似于Visual Studio dev community 中提到的问题,其中 ftime64 在 2015/2017 年似乎有一个year-2038 bug,但 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 都存在同样的问题
还有其他人遇到过这种情况吗?您是如何解决的?
【问题讨论】:
-
您可能希望将其编辑为minimal reproducible example,这样我们就可以尝试它而无需添加丢失的位或将我们的系统时钟设置为 2040 并弄乱 cookie、证书、许可证等。
-
根据the documentation
_timeb64应该可以到 3000 年 12 月 31 日。您是如何得出它不起作用的结论的? -
@DaveS - 我用一些额外的步骤更新了它。你必须调整你的时钟来测试这个。
-
2526338561看起来有点可疑,因为它对应于 2050-01-21 00:42:41 UTC。 -
@HowardHinnant 哎呀复制/粘贴失败。更新帖子。
标签: c++ c visual-studio-2015 visual-studio-2017 year2038