c++ - 从 Windows 中的系统时钟获取当前时间(以毫秒为单位)?

标签 c++ windows

如何在 C++ 中获取系统时钟的当前时间(以毫秒为单位)?这是一个特定于 Windows 的应用程序。

最佳答案

最简单(也是最直接)的方法是调用GetSystemTimeAsFileTime() ,返回 FILETIME ,一个存储自 1601 年 1 月 1 日午夜以来 100 纳秒间隔的 64 位数的结构。

至少在 Windows NT 3.1、3.51 和 4.01 的时候,GetSystemTimeAsFileTime() API 是能够检索当前时间的最快的用户模式 ​​API。它还提供了作为单个 API 调用的优势(与 GetSystemTime() -> SystemTimeToFileTime() 相比),在正常情况下不会失败。

转换 FILETIME ft_now;为一个名为 ll_now 的 64 位整数,请使用以下内容:
ll_now = (LONGLONG)ft_now.dwLowDateTime + ((LONGLONG)(ft_now.dwHighDateTime) << 32LL);

然后您可以除以每毫秒的 100 纳秒间隔数(其中 10,000 个),您有自 Win32 纪元以来的毫秒数。

要转换为 Unix 纪元,请减去 116444736000000000LL到 1970 年 1 月 1 日。

您提到希望找到当天的毫秒数。因为 Win32 纪元从午夜开始,所以今天到目前为止经过的毫秒数可以通过取模运算从文件时间中计算出来。具体来说,因为有24 hours/day * 60 minutes/hour * 60 seconds/minute * 1000 milliseconds/second = 86,400,000 milliseconds/day ,您可以使用系统时间的模数(以毫秒为单位)86400000LL .

对于不同的应用程序,可能不想使用模数。尤其是在计算耗时时,可能会因为半夜的折返而遇到困难。这些困难是可以解决的,我所知道的最好的例子是 Linux 内核中的 Linus Torvald 的线,它处理计数器回绕。

请记住,系统时间作为 UTC 时间返回(在 GetSystemTimeAsFileTime() 和简单的 GetSystemTime() 的情况下)。如果您需要管理员配置的本地时间,则可以使用 GetLocalTime() .

关于c++ - 从 Windows 中的系统时钟获取当前时间(以毫秒为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695288/

相关文章:

c++ - windows平台错误如何解决

Windows cmd 删除每个 bin 和 obj 文件夹

windows - Windows 中的原子性、易变性和线程安全

PHP - HTTPS SSL 申请

c++ - 通过引用传递空的或未初始化的 STL 容器

c++ - 15 位颜色分量,位移位

c++ - openfoam: flex yyin.rdbuf(std::cin.rdbuf() 错误

c++ - 以四种格式打印日期

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

windows - set/p 读取 ctrl+c 作为输入而不是终止脚本