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

时间:2013-11-26 21:57:51

标签: c++ time milliseconds

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

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

操作系统是Windows。

附加信息:

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

如果可能,请不要使用提升!

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

标准没有强制要求,但我理解std::chrono::system_clock的所有主要实现都使用1970-1-1作为时代,并且通常具有至少毫秒的分辨率。所以在实践中你可以做到:

#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';
}

答案 2 :(得分:2)

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

答案 3 :(得分:1)

查看此std::clock()它应具备获得毫秒计数所需的功能。

要寻找的另一件事是“划时代”。

答案 4 :(得分:0)

在Windows中使用GetSystemTime。 这是MSDN

的链接

你需要总结一下这些组件,但这很简单:)