问题描述
我正在编写一个设备驱动程序,它只在每个单独的字段(年、月、日、小时、分钟、秒、毫秒)中发送时间。我需要将其转换为计时时间点,并最终转换为自纪元以来的纳秒整数计数。如何从年、月、日、时、分、秒、毫秒获取计时时间点?
使用c++17;
解决方法
您可以创建一个填充 std::tm
的小转换函数,使用 std::time_t
创建一个 std::mktime
,然后调用所选时钟的 from_time_t
函数(注意,并非所有时钟有这个功能),最后加上毫秒。
#include <ctime>
#include <iostream>
#include <chrono>
template<class Clock = std::chrono::system_clock>
class Clock::time_point foo(int year,int month,int day,int hour,int minute,int second,int millisecond)
{
std::tm t{};
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = day;
t.tm_hour = hour;
t.tm_min = minute;
t.tm_sec = second;
return Clock::from_time_t(std::mktime(&t)) + std::chrono::milliseconds(millisecond);
}
int main() {
auto tp = foo(2021,3,8,22,25,50,469);
std::chrono::nanoseconds tse = tp.time_since_epoch();
std::cout << tse.count() << '\n'; // 1615242350469000000
}
请注意,这会根据计算机的本地时区设置将输入解释为本地日期/时间。