2017-02-08 202 views

回答

5

假設你有time_point。爲了天添加到對象,你可以只使用operator+std::chrono::hours

#include <chrono> 
std::chrono::system_clock::time_point t = std::chrono::system_clock::now(); 
std::chrono::system_clock::time_point new_t = t + std::chrono::hours(100 * 24); 
+2

也可以'使用命名空間std :: litterals',然後寫'new_t = t +(100 * 24h)',只用於樣式 – tforgione

+0

好吧,很好,我可以將time_point轉換爲紀元嗎?我想以一種可以從其他服務中移植的格式存儲數據庫中的那一刻 – cateof

+1

@DragonRock現在編輯你的評論已經太晚了,但正確的拼寫是'std :: literals'而且它是C++ 14 – rustyx

1

計時庫不包含日曆功能。沒有直接的方法來準確地實現你所要求的。

你可以找到一個時間戳,是值得的秒僅限100天未來使用的持續時間爲每天秒的比率。但是chrono沒有計算日期的工具。

5

Howard Hinnant的date library是免費的(開源);它延伸<chrono>與曆法的服務:

#include "date.h" 
#include <iostream> 

int 
main() 
{ 
    using namespace date; 
    using namespace std::chrono; 
    auto now = system_clock::now(); 
    auto today = floor<days>(now); 
    year_month_day future = today + days{100}; 
    std::cout << future << '\n'; 
} 

上述程序獲取當前時間system_clock::now(),然後截斷time_point擁有的days精度。然後添加100 days以查找未來time_point,然後將其轉換爲供人類消費的{year, month, day}結構。

的輸出是目前:

2017-05-19 

如果你想要做這種類型的計算沒有第三方庫的好處,我強烈建議建立一個chrono::duration days像這樣:

using days = std::chrono::duration 
    <int, std::ratio_multiply<std::ratio<24>, std::chrono::hours::period>>; 

現在,你可以添加days{100}system_clock::time_point

+1

看起來不錯,我會跟進。 – cateof

+0

任何計劃你會在std的''包括擴展? –

+1

@PiotrSkotnicki:關於它的工作:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html成功的機會是50/50。 –