2009-12-19 78 views
3

我不確定這個問題屬於StackOverflow,但在這裏。最差情況下操作系統的時鐘精度?

我需要使用C#爲一些數據從一方傳輸到另一方產生時間戳,我需要知道系統時鐘在所有操作系統中的最壞情況精度(Windows,Linux和Unix的)?我需要的是找出所有操作系統能夠驗證此時間戳​​的精度。

作爲例子,Windows Vista操作系統的時鐘分辨率大約爲10-15毫秒。

+0

你說的是系統時鐘嗎?或「系統時鐘」? MB上的時鐘通常具有亞毫秒分辨率。您可以通過一些測試來了解,但一個是Console.Writeline(System.DateTime.Now.Ticks); Thread.Sleep(100); Console.Writeline(System.DateTime.Now.Ticks); - 差異將遠大於100毫秒。 – GrayWizardx 2009-12-19 03:30:24

+0

我在談論「系統時鐘」,因爲它必須足夠普遍,以便所有操作系統都能夠驗證時間戳。 – Lopper 2009-12-19 03:43:05

回答

0

有趣。主要的操作系統具有最差的釐秒分辨率(0.01秒),儘管這通常嵌入更精確。

Linux根據計算機的時鐘硬件在其時間戳中提供高達微秒的分辨率(請參閱man utime)。 Windows NT/Win2K/XP /等。雖然它以0.000 000 1秒爲單位(千萬次每秒)來計算所有系統時間戳,但它在文件時間戳中提供了毫秒精度(僅使用NTFS)。

如果精確系統之間需要精確的時間分辨率,GPS接收器很容易達到100納秒的精度,而且許多便宜的型號可以達到10納秒。 Special GPS models使派生時間可供外部使用。

1

您是否希望爲數據生成類似unix timestamp的東西?或者找到一個不會與現有文件相沖突的時間戳?如果它晚一些,你總是可以使用蜱蟲。

任何「長」時間戳的問題是,它將相對於生成它的機器,但不會保證在其他系統上無碰撞,因爲時鐘可以設置不同(不是浮動,但實際上設置不同)。

如果數據是安全/敏感的,並且您正在查看基於時間的同步密鑰機制(ALA Kerberos),我不會建議您自己滾動,因爲有許多障礙需要克服,尤其是在同步系統並保持同步。

+0

我正在使用時間戳來指示數據從一方傳輸到另一方的時間,並且它不必是唯一的。所以,我不在尋找不會與現有文件相沖突的時間戳。 – Lopper 2009-12-19 03:40:47

+1

我會與Ticks一起去,因爲它應該給你足夠的分辨率,它的乾淨和直截了當(它是一個很長的值),並且可以很容易地重新組合成一個DateTime。如果客戶端是非.NET,那麼Unix時間戳也是一個很好的選擇。 – GrayWizardx 2009-12-19 03:47:33