如何从1970年1月1日(C++)开始获取当前系统时间(以毫秒为单位)
How to get current system time in milliseconds from 1/1/1970 (C++)
我需要一个函数或库来获取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 的链接
您需要对组件进行汇总,但这很简单:)
- c++ 11 如何获取系统时间?
- 如何使用跨平台代码在C++中设置系统时间?
- 将系统时间与变量进行比较 - C++
- 即使在多任务处理时,添加用户时间 + 系统时间(来自 shell 的时间命令)是否是一种可靠的措施?
- 系统时间从何而来?
- Qthread ::更改系统时间时睡眠不正常
- 在C++的主逻辑中接收真实/用户/系统时间
- 为什么在获取系统时间时在此处使用“atomic_signal_fence”
- 使用rdtsc计算系统时间
- 用C++设置windows系统时间
- 具有较低系统时间的C++时序方法
- 不取决于系统时间的时间
- 将系统时间 int 转换为格式化的时间字符串
- 在MFC对话框应用程序中全天候检查系统时间
- 执行循环,直到系统时间到达特定日期/时间
- 使用系统时间的随机数都是一样的
- C++ 在窗口中提升::时间与标准:自纪元(获取当前系统时间)以来的时间
- 获取系统时间(以毫秒为单位)作为int/double
- C++11打印当前系统时间(包括毫秒)
- 检查文件的上次写入时间是昨天由系统时间