我必须实例化一个自定义库类的对象,该类需要nanoseconds since 'epoch' in UTC time
来构造:
class utc_time
{
public:
utc_time(TYPE nanoseconds_since_epoch):
_nanoseconds_since_epoch(nanoseconds_since_epoch){}
private:
TYPE _nanoseconds_since_epoch;
};
我的输入是nanoseconds since 'midnight' in UTC time
。当然,我需要获得epoch
直到最后midnight
纳秒(以UTC为单位)才能将其添加到我的输入并将其提供给我的类构造函数。
我知道我们有gtime可能会有所帮助,但我不知道如何提取所需的信息。
我很感激你的线索
答案 0 :(得分:8)
在C ++ 11及更高版本中,<chrono>
可以很容易地用来做到这一点:
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
using namespace std;
using days = duration<int, ratio<86400>>;
nanoseconds last_midnight =
time_point_cast<days>(system_clock::now()).time_since_epoch();
cout << last_midnight.count() << '\n';
}
答案 1 :(得分:2)
事实上,自Epoch以来的纳秒数=自午夜以来的纳秒数+ 1e9 *最后午夜的日历时间。你缺乏后一个价值。您可以使用::gmtime()
和::mktime()
#include <ctime>
std::time_t last_midnight()
{
// compute "now"
std::tm& tm = *::gmtime(NULL);
// move it to "last midnight"
tm.tm_hour = 0;
tm.tm_min = 0;
tm.tm_sec = 0;
// get time_t back
return ::mktime(&tm);
}
您可能会对使用::gmtime_r()
(可重入版本)而不是::gmtime()
感兴趣。