Использование времени (NULL) на Android
Есть ли известные проблемы с использованием time(NULL)
на андроид?
Я попытался запустить следующий кусок кода:
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), оба из которых были настроены с правильным временем. Вывод выше от физического устройства.
Я склонен полагать, что есть проблема с этой конкретной функцией POSIX в Bionic, но я не мог найти какую-либо ссылку на нее, ни в Интернете, ни в документах Bionic.
1 ответ
Вы пытаетесь разыграть int64_t
в long long
и они не могут быть эквивалентны на Android. Если вы хотите распечатать int64_t
значения с использованием printf
а также %lld
либо сначала преобразуйте число в long long
или используйте правильный модификатор формата:
printf("%lld", (long long)now1_6);
или же
printf("%" PRId64, now1_6);
Для time(NULL)
давая ложные времена, попробуйте использовать gettimeofday
вместо:
struct timeval tm;
gettimeofday( &tm, NULL);