微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从年、月、日、时、分、秒、毫秒获取计时时间点?

如何解决如何从年、月、日、时、分、秒、毫秒获取计时时间点?

我正在编写一个设备驱动程序,它只在每个单独的字段(年、月、日、小时、分钟、秒、毫秒)中发送时间。我需要将其转换为计时时间点,并最终转换为自纪元以来的纳秒整数计数。如何从年、月、日、时、分、秒、毫秒获取计时时间点?

使用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 举报,一经查实,本站将立刻删除。