![]() |
Home | Libraries | People | FAQ | More |
Copyright c 2001-2005 CrystalClear Software, Inc
Subject to the Boost Software License, Version 1.0. (See accompanying file
LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
一組基於泛型程序概念的日期時間庫。
本文檔還提供了 PDF 格式。可從以下地址獲得:
| http://www.crystalclearsoftware.com/libraries/date_time/date_time.pdf |
另外,還有完整的 doxygen 引用:
| http://www.crystalclearsoftware.com/libraries/date_time/ref_guide/index.html |
最新版本的文檔在:
| http://www.crystalclearsoftware.com/libraries/date_time/index.html |
本庫的動機來自於在多個項目中對多個日期時間庫的使用和建立。這些日期時間庫為大多數開發項目提供了基礎的架構。不過,這些庫中多數在它們的計算、 格式化、轉換或執行其它功能的能力上有所限制。例如,許多庫不能正確地處理閏秒,提供象無限這樣的概念,或是提供高分辨率或網絡時間源的能力。這些庫還傾 向於嚴格規定日期和時間的表示法。這樣,針對某個項目或子項目的定制策略就不可能了。
在編程中使用日期和時間與在編程中使用字符串和整數幾乎一樣簡單和自然。帶有大量時間邏輯的應用程序可以通過一組健壯的操作符和計算能力得以根本性的簡化。類可以提供對日期和時間進行比較、增加時間長度、從時鐘取出日期和時間,以及自然地使用日期和時間間隔。
開發本庫的另一個動機是,將現代的C++庫設計技術應用於日期時間領域。為構建時間類型真正地建立一個框架。例如,通過提供迭代器和 traits 類,來控制本庫的基本屬性。就作者所知而言,本庫是將現代C++理念應用於日期時間庫的唯一真正的嘗試。
日期時間領域有大量術語和問題。以下對你將會在本庫碰到的一些概念作一個簡要的介紹。
本庫支持3種基本的時間類型:
這些時間類型中的每一個都有一個分辨率,它由可表示的最小時間長度定義。一個時間系統除了提供所有這些時間類型之外,還應提供對時間點進行標注和計算的規則。日曆系統是最簡單的時間系統,它的分辨率最大,為一天。格里曆系統是當今使用最廣的日曆系統(ISO系統基本上就是衍生自它)。不過,還有很多其它的日曆系統。UTC (Coordinated Universal Time)是一個廣泛使用的民用時間系統。因為地球的自轉,UTC要通過閏秒來進行調整(這不是可預測的,只是按需要進行調整)。多數本地時間系統都基於UTC,但還要根據地球自轉來進行調整,以使得各處白天的時間相似。另外,有些本地時間還包括了夏時制(DST)的調整,在夏天的時候對白天的時間進行平移。
時鐘設備是一種軟件組件(綁定於某個硬件),它提供基於某個時間系統的當前日期或時間。時鐘可以按已知的分辨率測量時間,該分辨率可能高於或低於特定的時間表示法。
本庫提供了對日期和時間進行計算的支持。但是,時間的計算與整數的計算有點不同。如果你對於時間計算的精確性非常關注,那麼你需要閱讀 穩定性、可預言和近似值 一節。
設計該庫的很大一個原因是因為看到很多有日期時間庫是按照允許進行定制和擴展的風格來建立的。一個典型的例子就是,日曆邏輯直接創建在日期類中。又 或者,時鐘讀取功能直接構建在時間類中。這些設計通常使得我們不可能擴展或修改庫的行為。在更為基礎的層次上,通常都假定了時間表示法的分辨率或是假定使 用了格里曆。
多數時候,結果是一個項目必須滿足於無法得到一個完整的庫,因為對時間表示法的高分辨率要求或是其它假定無法與庫的實現相匹配。這是非常不幸的,因為開始這樣一個庫遠不是一件簡單的工作。
由於沒有好的設計,作者所知的任何一個日期時間庫的設計都不夠靈活。在未來的版本中,我們期望可以有更多方面的擴展性。有關本庫的設計目標的信息請參見 這裡的總結。
|
Last revised: June 12, 2005 at 20:53:10 GMT |