の最小解像度がDateTime
ミリ秒ではなくティック(100ナノ秒単位)に基づいているのはなぜですか?
5 に答える
TimeSpan
些細なことにを追加するDateTime
のと同じTicks
作成操作を使用します。TimeSpan
DateTime
精度が高いほど良いです。主にに役立ちますが
TimeSpan
、上記の理由でそれをに転送しDateTime
ます。たとえば
StopWatch
、ミリ秒より短いことが多い短い時間間隔を測定します。を返すことができTimeSpan
ます。
私のプロジェクトの1つでは、TimeSpan
オーディオサンプルに対処するために使用しました。100nsはそのために十分に短いので、ミリ秒はそうではありません。ミリ秒ティックを使用する場合でも、を表すにはInt64が必要です
DateTime
。しかし、0から9999以外の年は実際には役に立たないため、範囲のほとんどを無駄にしています。DateTime
そこで彼らは、9999年を表すことを許可しながら、可能な限り小さいティックを選択しました。100nsで約261.5ティックがあります。タイムゾーン関連のタグ付けには2ビットが必要なため
DateTime
、100nsティックは、Int64に適合する最小の10の累乗間隔です。
したがって、より長いティックを使用すると、何も得られずに精度が低下します。短いティックを使用すると、64ビットに適合しません。=> 100nsは、制約が与えられた場合の最適値です。
ほとんどの場合必要ではありませんが、より高い時間分解能が得られます。
情報のためだけに:
1ミリ秒=10000ティック
1秒=10000000ティック
2ティックの差(デルタ)を使用すると、より詳細な精度を得ることができます(後でミリ秒または秒に変換します)
C#のDateTimeコンテキストでは、ティックは0
(DateTime.MinValue.Ticks)から始まり、DateTime.MaxValue.Ticks
new DateTime(0) //numbers between 0 and (864*10^9-1) produces same date 01/01/0001
new DateTime(DateTime.MaxValue.Ticks) //MaxValue tick generates 12/31/9999
システム時間ティックは、1日あたり8,640億ティックずつ増加します。
ティックは、システムクロックが機能するものです。