我試圖解決由day
,month
和year
和days_to_add
,加days_to_add
給出的日期給定日期的問題。增加持續時間時間點沒有任何影響
我能夠將日期轉換爲std::chrono::time_point<system_clock, ...>
。現在我想給它添加幾天:
template <typename Clock, typename Duration>
auto add_days(const std::chrono::time_point<Clock, Duration>& timepoint,
int days_to_add)
{
constexpr unsigned int seconds_in_day = 60 * 60 * 24;
// mm hh dd
return timepoint + Duration(seconds_in_day * days_to_add);
}
但是結果不變timepoint
。下面是完整的程序重現:
#include <iostream>
#include <chrono>
#include <iomanip>
template <typename Clock, typename Duration>
std::ostream& operator<<(std::ostream& os, const std::chrono::time_point<Clock, Duration>& timep)
{
auto converted_timep = Clock::to_time_t(timep);
os << std::put_time(std::localtime(&converted_timep), "%Y %b %d %H:%M:%S");
return os;
}
template <typename Clock, typename Duration>
auto add_days(const std::chrono::time_point<Clock, Duration>& timepoint,
int days_to_add)
{
constexpr unsigned int seconds_in_day = 60 * 60 * 24;
// mm hh dd
return timepoint + Duration(seconds_in_day * days_to_add);
}
int main()
{
auto today = std::chrono::system_clock::now();
auto tomorrow = add_days(today, 1);
std::cout << tomorrow;
return 0;
}
2017 Jun 17 16:23:18
2017 Jun 17 16:23:18
感謝錯字修復,更名爲變量發佈前,在這裏做了一個錯字,該wandbox代碼是正確的。 – Incomputable
我剛剛重現了VS2013中的錯誤(直到我做了一些修改才能夠編譯它)。我看到,'time_point'的內部數據如何變化,但'tomorrow'仍然是'今天'。我的第一個猜測:'持續時間'不需要幾秒鐘的時間。 (因此,'60 * 60 * 24'不是一天,但持續時間要短得多。) – Scheff