Dot-Net

如何檢測系統時間是否更改?(來自.net)

  • July 20, 2017

我正在使用 DateTime.UtcNow 來測量我的軟體中的時間,並且需要能夠判斷“動作 a”是否在“動作 b”之後不到 10 秒內發生

但是,如果系統時間發生變化怎麼辦?那麼如何檢測系統時間是否更改?

我不希望使用秒錶,因為我們需要在具有多個 CPU 的伺服器上執行,請參閱http://kristofverbiest.blogspot.com/2008/10/beware-of-stopwatch.html

我還需要處理虛擬機被暫停和重啟的問題,所以“滴答計數”對我來說不太可能有用。

您可以使用該SystemEvents.TimeChanged事件來檢測更改的時間。但是,只有在您執行消息泵時才會觸發 - 這對於 Windows 客戶端應用程序來說很好,但對於大多數伺服器應用程序(如服務、Web 應用程序等)來說則不然。

否則你可以使用Environment.TickCount- 它沒有很好的解析度,但如果你的“10”秒可以是“近 10 秒”,你可能沒問題。就虛擬機限製而言,請注意,當機器執行時間足夠長時,TickCount 會翻轉,因此您必須處理該問題,可能需要進行DateTime.UtcNow健全性檢查。

我會使用兩者的組合 - 但請注意,除了檢查一些已知準確的外部時間伺服器(這將產生性能影響)之外,沒有絕對準確的方法可以在 VM 情況下工作……確保你在您花費超過問題價值的時間之前確定什麼是“足夠可靠”。

引用自:https://stackoverflow.com/questions/4246882