如何解决如何从年、月、日、时、分、秒、毫秒获取计时时间点?
我正在编写一个设备驱动程序,它只在每个单独的字段(年、月、日、小时、分钟、秒、毫秒)中发送时间。我需要将其转换为计时时间点,并最终转换为自纪元以来的纳秒整数计数。如何从年、月、日、时、分、秒、毫秒获取计时时间点?
使用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
}
请注意,这会根据计算机的本地时区设置将输入解释为本地日期/时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。