簡體   English   中英

如何表示地質時間? (提升日期時間?)

[英]How to represent geological time? (Boost, Date_time?)

我正在嘗試處理時間步間隔數據。 數據有兩種格式:

1)明確設置每個間隔(例如1982-12-31、1988-01-01T00:00:00);

要么

2)設置開始日期,后跟秒,分鍾,小時,天,月或年的偏移量

我一直在使用boost::gregorian::dateboost::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM