私は何が間違っているかを見つけました:
したがって、どうやらhttp://www.epochconverter.com/は入力値の精度を仮定しており、それらの仮定から値841073068
は 1996/1997 になります。その正確な日付につながる仮定が何であるかはわかりませんが、正直なところ気にしません。
付属のデバッガーを使用して呼び出しnew Date(System.currentTimeMillis())
たところ、1070 年 1 月 10 日の日付が正しく表示されました。つまり、時計が狂ったように飛び出していません。
元の質問:
Android for と IoT ケース (このhttps://developer.qualcomm.com/hardware/dragonboard-410c ) を備えたシングルボード コンピューターを実行しています。動作する OS は、Qualcomm が提供するプレーンなバニラ Android です。
現在、ボードを一度に長期間実行したままにする信頼性をテストしていますが、説明が見つからない非常に奇妙な動作が見られます。
ボードは 10 日前に電源を入れましたが、インターネットにアクセスできません (WiFi はオンになっていますが、アクセス ポイントのセットアップもイーサネットもありません)。Bluetooth がオンになっており、オフィスには iBeacons と Eddystone があります。また、エリアにはWiFiがあります。
に移動しSettings -> Date and Time
たり、通知シェードを確認したり、時計アプリやカレンダー アプリに入ったりすると、1970 年 1 月 10 日と表示されます。
その上のアプリには、常に実行されているサービスがあり、データ処理とディスク ロギング (デバッグ用) を行います。
System.currentTimeMillis()
ログから、ボードが最初に電源を入れられたときに期待値を返していたことがわかります。つまり、ログの先頭はエポック タイムが 1970 年 1 月であることを示しています。
しかし、ログの最後 (およびライブ プロセスにデバッガーをアタッチ) では、 の値はSystem.currentTimeMillis()
1996 年 9 月/10 月のどこかにあります。値の例: 841073068
, 841263234
,841579239
だから私の質問は:
- ここで何が起きてるの?
- 価値が変化した理由
System.currentTimeMillis()
と、それを変えた可能性のあるものは何ですか? - Android UI (通知、時計アプリ、設定) にまだ 1970 が表示されるのはなぜですか? 彼らはどこからこの値を取得していますか?
編集:
回答には混乱があり、私の質問には詳細が欠けていたことがわかります。
時間差は測りたくない。実際のタイムスタンプが必要です。これらの値は、Bluetooth LE イベントとともに POST 経由でバックエンドに報告されます。この「ネットワークなし」のことは、ボードで実行している信頼性テストですが、ほとんどの場合ネットワークがあると予想され、ボードは通常の Android の方法を使用してネットワークから時間を自動更新する必要があります。
現在のテストのバッチで、何がうまくいかなかったのか、その理由を理解しようとしています。