我需要API调用的特殊格式的时间戳:



我的第一个假设是使用:

auto now = std::chrono::system_clock::now();
std::cout << "millisceconds since epoch: "
          << std::chrono::duration_cast<std::chrono::milliseconds>(
               now.time_since_epoch()).count()

但是当然输出是从UNIX时代开始的时间间隔Thu Jan 1 00:00:00 1970
因此,对于now = "Wed Dec 12 13:30:00 2018",它将返回1544617800000 ms。

如何获得自0001年1月1日午夜12:00:00以来经过的毫秒数?

上下文OSISoft API

用于指定日期范围的OSISoft API文档非常奇怪



从这个文档中,我已经问了一个问题,该问题是如何获得自0001年1月1日午夜12:00:00以来经过的毫秒数。

我也将问题链接到PISquare

最佳答案

没有定义的方法来计算:



从示例来看,他们使用的算法与https://www.epochconverter.com/seconds-days-since-y0相同。要获得相同的结果,您可以将719162天添加到unix时代:

auto now = std::chrono::system_clock::now();
std::cout << "millisceconds since epoch: "
          << std::chrono::duration_cast<std::chrono::milliseconds>(
               now.time_since_epoch() + std::chrono::hours(24 * 719162)).count()

注意c++ 20引入了std::chrono::days,您可以使用它而不是24小时。
根据系统时钟的分辨率,您可能需要在添加偏移量之前将其强制转换为毫秒,以避免溢出(719162天大于2 ^ 64纳秒)。

关于c++ - c++自01/01/0001 00:00:00起获得毫秒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53743217/

10-11 00:48
查看更多