1

TimeSpan クラスは、日、時間、分、秒、およびミリ秒で構築できます。

public TimeSpan(int hours, int minutes, int seconds);
public TimeSpan(int days, int hours, int minutes, int seconds);
public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds);

また、時間の 100 ナノ秒単位である「ティック」を使用して構築することもできます。

public TimeSpan(long ticks);

他の多くの時間関連オブジェクト (System.Timers.Timer.Interval など) がミリ秒単位に基づいている場合、100 ナノ秒の意味は何ですか? また、10 倍長いが、より一般的な時間単位であるマイクロ秒を使用しないのはなぜですか?

4

3 に答える 3

3

Wintel コンピュータは、100ns 刻みを使用するハードウェア クロックに基づいているためです。

于 2012-06-29T20:44:57.963 に答える
2

自分で意思決定に関与していない限り、「なぜ」という質問に答えるのは簡単ではありません。そうは言っても、HABOの回答が示すように、100 nsの目盛りはVMSからのインスピレーションである可能性が非常に高いです(Dave CutlerはVMSとWindows NTの両方の設計に関与していました)。

ただし、タイム スパンを符号付き 64 ビット数に合わせたいという制約があるため、ティック値として 100 ns を使用することは理にかなっています。最大の期間 ( TimeSpan.MaxValue) は

0x7FFF FFFF FFFF FFFF ティック
  = 9 223 372 036 854 775 807 ティック
  = 9 223 372 036 854 775 807 ティック / 10 000 000 ティック/秒
  = 922 337 203 685 秒
  ~ 30 000 年

ticks の値が異なると、最大時間範囲も異なります。

目盛り | 目盛り 最大期間(概算)
-------+------------------------
 10ns | 3000年
100ns | 3万年
  1μs | 30万年

値を無視DateTime.KindするDateTimeことは、基本的TimeSpanにエポック 01-01-0001 00:00:00 ( DateTime.MinValue) からのオフセットであるため、100 ns ティックを使用すると、日付 31-12-9999 23:59:59 ( DateTime.MaxValue) に対応できます。これは、3000 年より前にティックが不足する 10 ns ティックでは不可能です。また、1 μs ティックでは、10000 年を想定した日付の表現に関して見返りを得ることなく、時間分解能を 10 分の 1 に下げます。最初の年は「あなたは気にしない」。

それを念頭に置いて、符号付き64ビット値を使用しても、4桁の年すべてを表すことができる最小の目盛り値は100 nsであるようです。

(そして、2000 年問題が IT 業界にとって困難であると信じているのであれば、10000 年問題を待ってください。)

于 2016-11-17T12:29:57.150 に答える
2

[Open]VMS で使用される時間の単位であるclunkです。

于 2012-06-29T21:06:51.457 に答える