時間はミリ秒形式でサーバーからダウンロードされます。ロケールやその他のシステム設定から独立している必要があります。
それは「時間」ではありません。これはタイムスタンプであり、特定の時点で特定のソフトウェアによって報告された特定の時間値を意味します。
ここで、このサーバーとの将来の通信で、デバイスによって報告された時間をサーバーが認識している時間ベースに変換したいと考えている場合、それは少なくとも少しは理にかなっています。その場合、タイムスタンプを受信したときのデバイス時刻と、タイムスタンプ自体の時刻値との間のデルタを計算します。次に、サーバーに報告する将来の時間にそのデルタを適用します。
プログラムには、外部サーバーから取得する独自の内部クロックが含まれている必要があります
それはまったく意味がありません。
この宇宙では、現在の物理学の知識に基づいて、時間は連続的で直線的です。「外部サーバーから時刻を取得」しているときだけ時刻は変わりません。繰り返しますが、「外部サーバーから取得している」のはタイムスタンプです。これは、リクエストを行った時点でサーバーの時計が何を考えていたかを示すステートメントです。そのタイムスタンプをそのサーバーの他のタイムスタンプと比較する目的で使用できます。また、そのタイムスタンプを使用してデバイスの現在の時刻と比較し、差を判断できます。
ただし、Java コードでハードウェアを作成することはできないため、Java コードで「内部クロック」を作成することはできません。唯一のクロックはデバイスのクロックです。前述のように、前述の違いを適用することで、デバイスのクロックの時刻をサーバーのタイムベースに変換できますが、時間の経過は依然としてデバイス自体のクロックによってマークされています。
違いは or になるため、複数のスレッドが一度に値を処理することが懸念される場合は、int
orlong
を使用できます。AtomicInteger
AtomicLong