如何从1970年1月1日(C++)开始获取当前系统时间(以毫秒为单位)

How to get current system time in milliseconds from 1/1/1970 (C++)

本文关键字:系统 时间 为单位 开始 1970年 1月 1日 C++ 获取      更新时间:2023-10-16

我需要一个函数或库来获取1970年1月1日(C++)以来的当前系统时间(以毫秒为单位)?

我需要得到一个无符号的双数,包含1970年1月1日起的毫秒数。

操作系统是Windows。

其他信息:

需要同步服务器应用程序和客户端。客户是主人。客户端告诉服务器他什么时候需要做某事。之后,服务器将自行运行。我正在从客户端发送时间戳,其中包含到毫秒级别的当前系统时间。服务器一旦收到此消息,就必须执行相同的操作。他必须得到时间戳,差异将是调整时间线的毫秒数。这是一个如何同步处理同时做一些相关工作的问题。

如果可能的话,不要使用BOOST!

您可以使用GetSystemTimeAsFileTime获取当前时间作为FILETIME。创建一个代表所需epoch(1/1/1970)的SYSTEMTIME,并调用SystemTimeToFileTime将其转换为FILETIME。减去两个FILETIME s并缩放到所需的精度(从100ns单位到1ms单位)。

这将为您提供当前UTC时间。如果您需要本地时间,则需要使用例如SystemTimeToTzSpecificLocalTime转换为本地时间。

这不是标准强制要求的,但我知道std::chrono::system_clock的所有主要实现都使用1970-1-1作为epoch,并且通常至少具有毫秒分辨率。所以在实践中,你可以简单地做:

#include <chrono>
#include <iostream>
int main() {
    auto now = std::chrono::system_clock::now();
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count() << 'n';
}

您可以使用boost来确定您的持续时间。boost/date_time/gregorian/gregoria.hpp提供了一个函数date_duration(),它可以计算从1400年到今天的日期。

看看这个std::clock(),它应该具有获取毫秒计数所需的功能。

另一件需要寻找的事情是"纪元"时间。

在Windows中使用GetSystemTime。这是MSDN 的链接

您需要对组件进行汇总,但这很简单:)