web-dev-qa-db-ja.com

時間の計算はコンピュータでどのように行われますか?

時間の計算に関して、特定のプロジェクトのモジュールに特定の機能を追加する必要があります。この特定のケースでは、Javaを使用していて、Dateクラスのドキュメントを読んでいると、時間は1970年1月1日00:00:00 GMTからミリ秒単位で計算されることがわかりました。他の言語でも同様の「開始日」があると想定しても安全だと思うので、Javaの具体的な実装は問題ではないと思います。

時間の計算はコンピュータでどのように行われますか?与えられた「開始日時」から現在の日時までに経過したミリ秒数を正確に知るにはどうすればよいですか?

6
Jorge Mendoza

他の言語でも同様の「開始日」があると想定しても安全だと思うので、Javaの具体的な実装は問題ではないと思います。

ほとんどすべてのコンピュータで、これまたは同様のバリエーションの nix時間 が使用されます。

時間の計算はコンピュータでどのように行われますか?与えられた「開始日時」から現在の日時までに経過したミリ秒数を正確に知るにはどうすればよいですか?

通常、コンピューターには、通常は水晶発振器(ほとんどの最新の時計で使用されているものと同じ)に基づいて時間をカウントする1つ以上のハードウェアデバイスが含まれています。このようなデバイスには、サーバーごとのバリエーション/標準があります。

これらのタイマーデバイスには通常、別のバッテリーがあり、コンピューターの電源がオフの場合でも実行を続けることができます。コンピュータは2つの方法でそれらと相互作用します。

  • 起動すると、デバイスから現在の時刻を読み取ります
  • 定期的な間隔で、デバイスは ハードウェア割り込み を発生させ、OSが時間依存のタスクを実行するように処理します。

ただし、ハードウェアタイマーで使用される水晶発振器の精度は限られており、時間が経つにつれて正しい時刻からずれていきます。正確な時計を使用することが重要なアプリケーション(または手動で時刻を調整する手間を省くため)では、コンピューターは Network Time Protocol を介して定期的に時刻を同期します。 (直接または間接に)高精度 原子時計 に。

11

1分は60秒、1時間は60分、1日は24時間です。それは一日で86400秒です。これに1000を掛けると、1日のミリ秒数がわかります。

これで、時間の始まり(1970年1月1日、グリニッジ標準時00:00:00)からの日数を計算できるようになります。これに1日のミリ秒数を掛けると、コンピューターの時計が現在の日付/時刻を表すために格納する内部数値が得られます。

5
Robert Harvey

BIOSは システムクロック に時刻を保存します。 OSは、その形式で時刻を取得するシステム関数を提供します(UNIXシステム、Javaフレームワークに一致し、Windowsは異なる「エポック」-開始日-を使用しますが、Javaランタイム結果を期待どおりに変換します。

3
Michael Brown