【问题标题】:Handling leap seconds on sub second precision UTC time arithmetic处理亚秒精度 UTC 时间算术的闰秒
【发布时间】:2016-07-05 10:50:19
【问题描述】:

我正在做实时信号处理:

我的输入是带有时间戳标记的样本。 我的输出是用 UTC

中的时间戳标记的估计值

我需要补偿处理延迟,所以在样本N 我将输出样本N-K 的估计值,K 是我的处理延迟。

时间补偿必须知道闰秒。即,延迟为10ms:

INPUT  TS = 20150701T000000.000000 
OUTPUT TS = 20150630T235960.990000

我认为struct tm 是时间戳,使用第 61 秒。

但我找不到 (struct tm TAI ) 翻译函数。

【问题讨论】:

    标签: datetime c++11 time signal-processing real-time


    【解决方案1】:

    使用D. J. Bernstein's libtai外部TAI64 格式 值作为您的时间戳。

    【讨论】:

      【解决方案2】:

      Howard Hinnant's timezone library(免费、开源、跨平台、C++11)会处理这个问题:

      #include "date/tz.h"
      #include <iostream>
      #include <sstream>
      
      int
      main()
      {
          using namespace std;
          using namespace std::chrono;
          using namespace date;
          istringstream in{"20150701T000000.000000"};
          utc_time<microseconds> ts;
          in >> parse("%Y%m%dT%H%M%S", ts);
          ts -= 10ms;
          std::cout << format("%Y%m%dT%H%M%S", ts) << '\n';
      }
      

      输出:

      20150630T235960.990000
      

      utc_time&lt;microseconds&gt; 是一个微秒精度的时间戳,可以感知闰秒。可以对其进行算术运算、格式化和解析。它的闰秒信息来源取决于IANA timezone database。该库可以配置为自动下载此信息,也可以手动下载。 documentation 包含适用于 linux、macOS 和 Windows 的完整安装说明。甚至 iOS 和 Android 也有支持。该库可从 C++11 及更高版本移植。

      这个库也被投票加入了 C++20 规范草案,并记录在 here 中。因此,当时机成熟时,您将能够从您的 C++ 供应商那里获得此功能,而不是从this timezone library

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        • 1970-01-01
        • 2014-10-21
        • 2022-10-14
        • 1970-01-01
        • 2013-08-12
        相关资源
        最近更新 更多