我想知道特定時代以來的當前時間(以毫秒爲單位)。 2016年1月1日。如何在C++中爲std :: chrono :: steady_clock設置時期?
這樣做的原因是爲了避免使用8字節的std :: chrono :: milliseconds。
我想將結果存儲在4字節數據類型中。
std :: chrono :: steady_clock()使用未指定的默認紀元。
我想知道特定時代以來的當前時間(以毫秒爲單位)。 2016年1月1日。如何在C++中爲std :: chrono :: steady_clock設置時期?
這樣做的原因是爲了避免使用8字節的std :: chrono :: milliseconds。
我想將結果存儲在4字節數據類型中。
std :: chrono :: steady_clock()使用未指定的默認紀元。
您可以按照David的評論建議的方式創建自己的時鐘。
#include "date.h"
#include <cstdint>
#include <iostream>
struct myclock
{
using rep = std::int32_t;
using period = std::milli;
using duration = std::chrono::duration<rep, period>;
using time_point = std::chrono::time_point<myclock>;
static constexpr bool is_steady = false;
static time_point now() noexcept
{
using namespace std::chrono;
using namespace date;
return time_point{duration_cast<duration>(system_clock::now()
- sys_days{jan/1/2016})};
}
};
static_assert(sizeof(myclock::time_point) == 4, "");
static_assert(sizeof(myclock::duration) == 4, "");
int
main()
{
auto tp = myclock::now();
std::cout << tp.time_since_epoch().count() << '\n';
}
的表示被指定爲你指定爲int32_t
,精度是毫秒,因爲你指定。
爲了獲得您指定的時代,我從this date library獲得了一個協助,這使得互操作日期和system_clock::time_point
非常容易。我只需從system_clock::now()
中減去所需的時間,並將該持續時間轉換爲myclock::duration
(32位毫秒)。我
剛纔運行該程序的輸出:
1207186990
這是13.97天。
你可以計算你的時鐘與此代碼範圍:
using namespace date;
using namespace std::chrono;
auto min = milliseconds{myclock::duration::min()} + sys_days{jan/1/2016};
auto max = milliseconds{myclock::duration::max()} + sys_days{jan/1/2016};
std::cout << min << '\n';
std::cout << max << '\n';
的顯式轉換到std::chrono::milliseconds
是必要的,以避免溢出。這將輸出:
2015-12-07 03:28:36.352
2016-01-25 20:31:23.647
所以好點的快點。 myclock
將在另外10天內溢出。 :-)
相關:http://stackoverflow.com/questions/33964461/handling-julian-dates-in-c11-14 –
我建議你去爲自己創建自己的時鐘類,它從'現在是'time_point <時鐘,持續時間>' –
David