對協定來說,取得正確的日期與時間可能非常重要。兩者都可以作為中繼資料使用,例如網路檔案協定中的檔案修改時間戳;也可以用來判斷驗證憑證是否過期。

時間戳實作不正確可能造成嚴重的安全問題——憑證過期判斷一旦失準,等於驗證機制被繞過。

日期與時間的表示方式取決於使用需求、應用程式執行的平台,以及協定的空間需求。以下說明兩種常見表示法。

POSIX/Unix 時間#

目前 POSIX/Unix 時間以 32 位元有號整數儲存,代表自 Unix 紀元(Unix epoch)以來經過的秒數。紀元通常定義為 UTC 1970 年 1 月 1 日 00:00:00。

這不是高解析度的計時器,但對多數情境已經足夠。

作為 32 位元整數,這個值的上限是 UTC 2038 年 1 月 19 日 03:14:07,屆時表示法會溢位。部分現代作業系統已改用 64 位元表示法來解決這個問題。

Windows FILETIME#

Windows FILETIME 是 Microsoft Windows 用於檔案系統時間戳的日期時間格式。由於它是 Windows 上唯一具有簡單二進位表示的格式,也出現在一些協定之中。

項目POSIX/Unix 時間Windows FILETIME
型別32 位元有號整數64 位元無號整數
單位1 秒100 奈秒
紀元UTC 1970-01-01 00:00:00UTC 1601-01-01 00:00:00

FILETIME 因此擁有比 POSIX/Unix 時間格式更大的範圍。

在傾印資料中辨識時間戳時,紀元與單位就是最好的指紋:看到 32 位元的秒數值先往 Unix 時間猜,看到很大的 64 位元值則值得往 FILETIME 方向試。