2

time(NULL)在 Android上使用是否有任何已知问题?

我尝试运行以下代码:

int32_t now1 = time(NULL);
int64_t now1_6 = (int64_t)time(NULL);
int32_t nt = (time_t)-1;
int64_t nt6 = (int64_t)-1;

然后使用以下格式记录结果:

"Now1 is %d. Now1_6 is %lld. NT is %d. NT6 is %lld.\n", now1, now1_6, nt, nt6

这是我得到的输出:

01-05 19:10:15.354: I/SMOS(11738): Now1 is 1533390320. Now1_6 is 6585861276402981128. NT is 0. NT6 is 283493768396.

还有其他问题,例如在不同的循环迭代中获得相同的时间值。

我在运行 Android 4.0.3 (API 15) 的虚拟设备和物理设备上都遇到了这些问题,两者都配置了正确的时间。上面的输出来自物理设备。

我被引导相信 Bionic 中的这个特定的 POSIX 函数存在问题,但我在网上或 Bionic 文档中都找不到任何参考。

4

1 回答 1

1

您正在尝试将 aint64_t转换为 a long long,它们在 Android 上可能不等效。如果要使用and打印int64_t值,请先将数字转换为,或使用正确的格式修饰符:printf%lldlong long

printf("%lld", (long long)now1_6);

或者

printf("%" PRId64, now1_6);

对于time(NULL)给予虚假时间,请尝试使用gettimeofday

struct timeval tm;
gettimeofday( &tm, NULL);
于 2013-01-05T19:04:13.850 回答