我需要一个函数或库来从1970年1月1日(C ++)获得当前系统时间(以毫秒为单位)?
我需要得到一个无符号的双精度数,其中包含从1970年1月1日起的毫秒数。
操作系统是Windows。
附加信息:
需要同步服务器应用程序和客户端。客户是主人。 客户端告诉服务器何时需要做某事。之后,服务器自行运行。我将包含当前系统时间的客户端的时间戳发送到毫秒级别。服务器一旦收到此消息必须做同样的事情。他必须得到时间戳,差异将是调整其时间轴的毫秒数。这是一个如何同步处理以同时完成一些相关工作的问题。
如果可能,请不要使用提升!
答案 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
的链接你需要总结一下这些组件,但这很简单:)