C++ 如何计算精确的时差(C+;+;)?

C++ 如何计算精确的时差(C+;+;)?,c++,linux,datetime,time,C++,Linux,Datetime,Time,我有两个UTC时间,存储为“day:hour:minute:second:millis秒”,也可以作为day、hour、minute等的五个整数变量。我想以毫秒的精度找出这两个时间之间的差异。如何在C++中实现? 如何计算精确的时差(C++) 在Linux上,阅读并跟随那里的超链接。要使用C解析时间,请使用。要将其转换并格式化为字符串,请使用。两者都可以从C++代码调用(使用外部)C“< /代码>”。 C语言和C++语言是不同的语言。另见。 原来的问题被标记为C和C++ 对于C,请阅读这本书,对

我有两个UTC时间,存储为“day:hour:minute:second:millis秒”,也可以作为day、hour、minute等的五个整数变量。我想以毫秒的精度找出这两个时间之间的差异。如何在C++中实现?

如何计算精确的时差(C++)

在Linux上,阅读并跟随那里的超链接。要使用C解析时间,请使用。要将其转换并格式化为字符串,请使用。两者都可以从C++代码调用(使用<代码>外部)C“< /代码>”。 C语言和C++语言是不同的语言。另见。 原来的问题被标记为C和C++

对于C,请阅读这本书,对于Linux,请阅读

<> C++,Real.

你可以用这个。 该标题中的类和函数允许您计算该差异。

使用编译代码时,启用所有警告和调试信息。因此,使用
gcc
g++
-Wall-Wextra-g
并学会使用

在Linux上,您会发现有用的库,如、、和诸如或之类的工具

请查看或查找一些能启发您的源代码

我想找出这两个时间之间的差异,精确到毫秒


这可能很困难。您的硬件可能没有毫秒精度。如果连接到Internet,请考虑使用一些服务。如果未连接,预计时钟将在几周内漂移到一毫秒以上,除非您采取非常具体的预防措施或购买昂贵的硬件。

要以毫秒精度计算时差:

  • 将两个时间戳转换为
    std::chrono::system\u clock::time\u point

     struct std::tm thetime  { .tm_sec = sec, .tm_min = min, .tm_hour = hour,
                               .tm_mday = mday, .tm_mon = mon, .tm_year = year };
    
     auto mytime = (std::chrono::system_clock::from_time_t(std::mktime(&thetime)))
           + std::chrono::milliseconds(msec);
    
  • 减去两个生成的时间戳

     auto diffms = std::chrono::duration_cast<std::chrono::milliseconds(mytime2 - mytime1).count();
    

    auto diffms=std::chrono::duration\u您可以指定“日”部分的表示方式吗?如果只是一个delta天数,那么最明显的方法就是将所有的天数相乘,得到总的毫秒数。你的答案中几乎没有任何东西能解决实际问题。您可以讨论UNIX特定的时间函数(而不真正解释它们与问题的关系)、C++书籍和编译器、开源库和NTP。问题是C++中两个UTC时间戳的时间差。这当然是一些有用的链接,但对于试图解决原始问题的人来说,不会有太多直接的好处。请注意,这种方法不考虑闰年、闰秒和其他日历骗局,因此,它为与任何此类好奇重叠的时间跨度提供了潜在的意外结果。@ComicSansMS为什么这样认为?《时代》杂志的
    文档是如何暗示这一点的?仔细想想,我不确定闰年到底会发生什么,这可能是我的大脑放屁,所以对此表示歉意。当然,不需要处理跳秒,这是因为POSIX如何定义系统时钟和C++。有关完整的混乱故事,请参阅。我同意很多应用程序都不关心这个问题,但在复制粘贴之前,你最好确保你的应用程序不关心这个问题。@ComicSanms闰年肯定有效,但闰秒和DST确实可能有效,也可能无效。(如果正在计算毫秒数,则可能不应使用这两种方法中的任何一种)