14.12 怎樣在日期上加 N 天?怎樣取得兩個日期的時間間隔?

ANSI/ISO 標準 C 函數 mktime() 和 difftime() 對這兩個問題提供了一些 有限的支持。 mktime() 接受沒有規格化的日期, 所以可以用一個 日期的 struct tm 結構, 直接在 tm_mday 域進行加或減, 然後調用 mktime()  對年、月、日域進行規格化, 同時也轉換成了 time_t 值。 可以用 mktime() 來計算兩個日期的 time_t 值, 然後用 difftime() 計算 兩個 time_t 值的秒數差分。

但是, 這些方法只有日期在 time_t 表達範圍內才保證工作正常。對於保守的  time_t, 通常範圍是從 1970 年到大約 2037 年; 注意有些 time_t 的表達 不是按照 Unix 和 Posix 標準的。tm_mday 域是個 int, 所以日偏移量超出  32,736 就會上溢。還要注意, 在夏令時轉換的時候, 一天並不是 24 小時, 所以不要假設可以用 86400 整除。

另一個解決的方法是用 ``Julian 日期", 這可以支持更寬的時間範圍。處理 Julian  日期的代碼可以在以下地方找到: Snippets 收集 (參見問題 18.16); Simtel/Oakland 站點 (文件 JULCAL10.ZIP, 參見問題 18.18) 和 文獻中提到的文章  ``Date conversionsciteburki。

參見問題 13.11, 20.27 和 20.28

參考資料: [K&R2, Sec. B10 p. 256]; [ISO, Secs. 7.12.2.2,7.12.2.3]; [H&S, Secs. 18.4,18.5 pp. 401-2]; [Burki]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)