Использование времени (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);
Другие вопросы по тегам