2016-06-15 6 views
2

アプリケーションを作成すると、2つのデバイスでSystem.currentTimeMillis()によって取得されたエポック時間がほぼ7時間で異なることに気付きました。 たとえば、取得したもの:1465999565478、もう1つは1465976266000です。 これは期待されますか?そうであれば、この差は一定であり、これはオフセットを確立することを可能にするか、または何とか変更することができるか?System.currentTimeMillis()は、2つのデバイス間の重複時間によって異なります

+1

両方のデバイスで時間と時間帯は何ですか?彼らは同じですか? –

+1

あなたは、両方のデバイスが同じ現在のシステム時間で実行されていることを確信していますか?原因:[currentTimeMillis()](https://developer.android.com/reference/java/lang/System.html#currentTimeMillis())は、** 1970年1月1日00:00:00.0 **の間の値を計算します。現在のシステム時刻 – Strider

+1

@PankajKumar ** time **は重要ですが、** timezone **は関係ありません - [docs](https://developer.android.com/reference/java/lang/System.html#currentTimeMillis ()) - *このメソッドは、システムのタイムゾーンに関係なく、常にUTC時刻を返します。* – Strider

答えて

4

System.currentTimeMillis()は、デバイス内のリアルタイムクロックの値を報告します。それは次のようになります(例えば、NITZ)モバイルキャリア

  • SNTPサーバ設定アプリ
  • を介してユーザにより設定された
  • を問い合わせるデバイスによって設定からの信号によって設定

    • 後者のオプションは、System.currentTimeMillis()が、設定アプリで許可されている日時の範囲内で可能な値を報告できることを意味します。基盤となるデバイスでは、設定でサポートされているものを超えて、日付と時刻を設定するためのオプションがさらに多くなります。

      デバイスによって報告された時刻がそのデバイスとそのユーザーにとって問題ないと想定することは安全です。結局のところ、ユーザーが現在の時刻が1977年6月15日の10:21であると主張した場合、これがユーザーの決定です。

      デバイスから報告された時間は、他のデバイスから報告された時間に関係するとは限りません。サーバーを利用して時間を判断するか、他のソースから現在の時間を取得する(たとえば、自分でSNTPサーバーに電話するなど)。

      これは、ほとんどの他のコンピュータハードウェアでの動作時間と大きく異なるわけではないことに注意してください。

  • 関連する問題