【问题标题】:How to get current system time in milliseconds from 1/1/1970 (C++) [duplicate]如何从 1970 年 1 月 1 日(C++)获取当前系统时间(以毫秒为单位)[重复]
【发布时间】:2013-12-12 06:57:16
【问题描述】:

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

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

操作系统是 Windows。

附加信息:

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

如果可能,不要使用 BOOST!

【问题讨论】:

  • Uuuuuh 这将是一个巨大的价值!
  • 不存在无符号双精度数
  • 好的。我不关心 unsigned double 但它必须被完全包含。
  • @g-makulik 我怀疑,当前的数字是 1385504099.2318995(以秒为单位),它几乎没有进入毫秒(0.231)在像 +/- 这样的简单计算中下降的区域。但是,让我们不要继续进行无关紧要的边讨论和妥协,以供解释。
  • 另外,当您说“没有任何效果”时,通常最好告诉您具体尝试了什么。

标签: c++ time milliseconds


【解决方案1】:

您可以使用GetSystemTimeAsFileTimeFILETIME 的形式获取当前时间。创建一个SYSTEMTIME 代表您想要的纪元(1/1/1970)并调用SystemTimeToFileTime 将其转换为FILETIME。减去两个FILETIMEs 并缩放到您想要的精度(从 100ns 单位到 1ms 单位)。

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

【讨论】:

  • 我用 FILETIME 时间函数实现了我的目标。夏令时有一些困难,但其余的都很好。
【解决方案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';
}

【讨论】:

  • 此解决方案有效,但我不允许使用 Boost。这些是我的客户要求。
  • @Patrik 这不是 boost,而是 C++11。我相信 &lt;chrono&gt; 在 VS2010 及更高版本中得到支持。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    要寻找的另一件事是“纪元”时间。

    【讨论】:

    • clock() 返回自进程启动以来经过的时间量(至少在 Visual C++ 实现中)。
    • 只推荐使用来自std::chrono 的内容和一些特定的指针来增强你的答案。
    【解决方案5】:

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

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

    【讨论】:

    • 总结是不够的。不确定如何以秒为单位计算年份。也有闰年需要考虑。 365/366 天 ...
    猜你喜欢
    • 2010-12-29
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多