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

を にキャストしようとしていますがint64_tlong longAndroid では同等ではない可能性があります。と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 に答える