我對日期時間算術(shù)的了解越多,我就越頭疼。時間有很多種:民用時間世界標準時間泰UNIX 時間系統(tǒng)時間線程時間CPU時間然后時鐘可以跑得更快或更慢,或者向后或向前跳躍,因為夏令時跨時區(qū)移動閏秒NTP同步廣義相對論而如何處理這些又取決于:操作系統(tǒng)硬件編程語言所以請有人告訴我,對于我的具體用例,測量短間隔的最安全和最可靠的方法?這是我正在做的事情:我正在用Python (3.7.x) 制作游戲,我需要跟蹤某些事件發(fā)生后的時間。例如,玩家按住按鈕多長時間,或者敵人發(fā)現(xiàn)玩家多長時間,或者關(guān)卡加載多長時間。時間刻度應該精確到毫秒(納秒是多余的)。以下是我想確保避免的情況:你在深夜玩游戲。在您所在的時區(qū),那天晚上,DST 凌晨 2 點的時鐘向前移動了一個小時,因此分鐘數(shù)為:1:58、1:59、2:00、3:01、3:02。游戲中的每個與時間相關(guān)的變量突然都增加了一個小時——它認為你一直按住那個按鈕 1 小時 2 秒,而不是僅僅 2 秒。災難接踵而至。相同,但 IERS 決定在當天的某個時間插入或減去閏秒。您播放過渡,所有時間變量都會增加或減少額外的秒數(shù)。災難接踵而至。您在火車或飛機上玩游戲,當您越過時區(qū)邊界和/或國際日期變更線時,災難隨之而來。游戲在某些硬件和操作系統(tǒng)上的上述情況下正常運行,但在其他情況下不能正常運行。即它在Linux 上中斷但在Window 上不中斷,反之亦然。而且我不能真正為這些編寫測試,因為有問題的事件很少出現(xiàn)。我需要在第一時間把它做好。那么,我需要使用什么與時間相關(guān)的功能呢?我知道有普通的 old time.time(),但也有一系列令人眼花繚亂的其他選擇,比如time.clock()time.perf_counter()time.process_time()time.monotonic()然后是上述所有內(nèi)容的納秒變體。從閱讀文檔看來,這似乎是time.monotonic()我想要的。但是,如果閱讀有關(guān)計時的所有細節(jié)教會了我什么,那就是這些東西從來都不是它們看起來的樣子。曾幾何時,我以為我知道什么是“秒”?,F(xiàn)在我不太確定。那么,如何確保我的游戲時鐘正常工作?
1 回答

胡子哥哥
TA貢獻1825條經(jīng)驗 獲得超6個贊
time 模塊的規(guī)范是查找每個模塊的詳細信息的最佳位置。
在那里,您可以很容易地看到:
time.clock()
已棄用,應替換為其他功能time.process_time()
僅計算您的進程花費的 CPU 時間,因此它不適合測量掛鐘時間(這是您所需要的)time.perf_counter()
有同樣的問題time.process_time()
time.time()
剛剛好,但如果用戶修改當前時間,它會給出錯誤的時間time.monotonic()
- 這似乎是測量時間間隔的最安全的選擇 - 請注意,這根本不會給你當前時間,但它會給你兩個時間點之間的正確差異
至于納秒版本,只有在需要納秒時才應該使用它們。
添加回答
舉報
0/150
提交
取消