2014-01-21 71 views
5

我有以下的身體一個簡單的控制檯應用程序:爲什麼DateTime.Now.Ticks不一致?

Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 
Console.WriteLine(DateTime.Now.Ticks.ToString()); 

而這三種不同的運行的輸出:

635258949900018675 
635258949900028676 // +10001 
635258949900028676 // +0 
635258949900038677 // +10001 
635258949900038677 // +0 
635258949900038677 // +0 
635258949900038677 // +0 
635258949900038677 // +0 
635258949900038677 // +0 
635258949900038677 // +0 

635258949937502423 
635258949937512424 // +10001 
635258949937512424 // +0 
635258949937512424 // +0 
635258949937512424 // +0 
635258949937522425 // +10001 
635258949937522425 // +0 
635258949937522425 // +0 
635258949937522425 // +0 
635258949937522425 // +0 

635258961813519906 
635258961813529907 // +10001 
635258961813529907 // +0 
635258961813529907 // +0 
635258961813529907 // +0 
635258961813539908 // +10001 
635258961813539908 // +0 
635258961813539908 // +0 
635258961813539908 // +0 
635258961813539908 // +0 

有人可能會想這是正常的,這些值是因爲不同的執行Console.WriteLine之間需要一段時間。行之間的間隔是一個恆定值10001,但不知何故,這個值不會被添加到每一步的前一個值。有時候是,有時並非如此。我想知道爲什麼會發生這種情況。

+0

目前還不清楚你在問什麼 - 之間的間隔就我所知,兩個不同的值總是似乎是10001個刻度。你真的只是問爲什麼變化之間有不同數量的調用?如果是這樣,請記住你的機器有多少 - 以及有多少事情可能會有所不同。 –

+0

對不起。我的意思是在每一步都不會增加10001。有時會增加,有時卻不會。 –

+0

謝謝@JonSkeet。你幾乎總是回答有關日期時間的問題:)。我希望你能看到我的另一個問題,我很長一段時間尋找答案。我知道你沒有太多時間,但請你分享一下你的看法?提前致謝。 http://stackoverflow.com/questions/20924278/why-does-timespan-tostring-require-escaping-separators –

回答

1

報價喬恩:

你真的只是問爲什麼有改變之間的調用 不同的數字?如果是這樣,請記住您的機器有多少 - 以及有多少可能會有所不同。

2

Eric Lippert擁有優秀的article關於此主題。主要報價:

的「掛鐘」的目的計時器是產生典型的現實世界的日期和時間 使用,像 或「我們什麼時候變成「什麼時間醫生是誰開始?」夏令時?「或」顯示我午餐後上週四編輯的 文件「。這些不是 操作,需要亞微秒準確度。

0

雖然間隔日期時間更新(不發生一次打勾)你可以用秒錶來更準確地這樣的測量時間:

var sw = new Stopwatch(); 
sw.Start(); 
//Run some code 
Console.WriteLine (sw.ElapsedMilliseconds);