我正在进行实时信号处理:
我的输入是标有时间戳的样本。 我的输出是使用 UTC
中的时间戳标记的估算值我需要补偿处理延迟,因此在样本N
我输出样本N-K
的估计值,K
是我的处理延迟。
时间补偿必须是闰秒。即延迟为10ms
:
INPUT TS = 20150701T000000.000000
OUTPUT TS = 20150630T235960.990000
我认为struct tm
是时间戳,利用了第61秒。
但我无法找到(struct tm
< - > TAI )翻译功能。
答案 0 :(得分:0)
使用D. J. Bernstein's libtai和外部TAI64格式值作为时间戳。
答案 1 :(得分:-1)
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<microseconds>
是一个微秒精度的时间戳,可以闰秒识别。可以对它进行算术运算,格式化并解析它。它取决于IANA timezone database的闰秒信息来源。此库可以配置为自动下载此信息,也可以手动下载。 documentation包含linux,macOS和Windows的完整安装说明。甚至iOS和Android都有支持。该库可以从C ++ 11中直接移植。
这个库也被投票到C ++ 20规范草案中,并且已经记录在案here。因此,到时候,您将能够从C ++供应商而不是this timezone library获得此功能。