![](/img/trans.png)
[英]boost::locale::date_time: How to get data from date_time object in Boost C++?
[英]How to represent geological time? (Boost, Date_time?)
我正在嘗試處理時間步間隔數據。 數據有兩種格式:
1)明確設置每個間隔(例如1982-12-31、1988-01-01T00:00:00);
要么
2)設置開始日期,后跟秒,分鍾,小時,天,月或年的偏移量
我一直在使用boost::gregorian::date
和boost::posix_time::ptime
來管理它,並使用這些工具來獲取格式正確的字符串。 但是,現在為我提供了覆蓋190萬年的數據,每個時間步長約為10年。 開始日期是0,最后一個間隔是7e8。 顯然,我已經達到極限了。
有沒有辦法使用Boost來代表這樣的規模? 我的搜索得出的結論是“否”,在這種情況下,我們將只編寫自己的類。
這是一個非常有趣的問題。 但是要達到這一領域的極限,就需要仔細考慮超出當今天文極限的風險。
日歷和日期非常相關:
Posix時間定義為從1970年1月1日起經過的時間,不包括the秒。 boost使您可以在構建時在微秒或納秒分辨率之間進行選擇。
公歷自1582年10月15日開始定義。請注意,在1930年之前,一些國家使用公歷,有些國家仍使用儒略歷,這一過渡產生了一些有趣的事實 ,例如,英格蘭和美國在1752年9月13日缺席。
在它之前是儒略歷,由凱撒在公元前45年定義。 請注意,盡管格式,月數和月長與公歷相同,但兩者之間存在13天的差異,這要考慮到多年來的累計差異。
在公元前45年之前,是否有355天/年的舊羅馬日歷。
更早之前,直到人類開始,肯定還有各種各樣的其他日歷。 但是一天並不總是24小時。 每一天1至3微秒的變化太陽日加起來,如果你在數百萬年去了。 例如,6億年前,一天的平均長度只有22個小時。
如果您同時在地質尺度和狹窄尺度上工作,最簡單的方法就是使用一個類或一個聯合來組合一個long long
(對於公元前幾年的地質尺度而言)和boost::gregorian::date
(對於AC來說,如果您可以承受不精確的julian / gregorian)。 好的格式將相對易於組織。
另外,您可以考慮將chrono與最長的整數類型配合使用,並使用一個比率來表示您正在計算年份:
typedef chrono::duration<long long, ratio<31556926, 1>> duration_in_year;
duration_in_year d2(1900000); // 1,9M years
chrono::time_point<chrono::system_clock> t1 = chrono::system_clock::now() - d2;
但是不錯的打印輸出不會像boost那樣明顯。 而且,您必須定義自己的時鍾類(上面的示例將使用1,9Mio年,但由於用於實例化system_clock
類的參數而無法使用很多年)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.