使用静态日期时 std::chrono 的时间戳错误

问题描述 投票:0回答:1

我将静态日期输入 std::chrono 并期望以下时间戳

1703063163

std::chrono::system_clock::time_point a;
a = std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds>(std::chrono::seconds(51));
a += std::chrono::minutes(35);
a += std::chrono::hours(10);
a += std::chrono::days(20);
a += std::chrono::months(12);
a += std::chrono::years(53);

cout << "New: " << std::chrono::system_clock::to_time_t(a);

但是我得到了结果

New: 1705841559 

这是什么原因?

c++ time c++20
1个回答
0
投票

这里的问题与以下事实有关:std::chrono::system_clock::time_point通常表示为自纪元以来的秒数。您在 a 上执行的构造和修改操作并不是设置各个组成部分(如日、月和年),而是增加总秒数。

如果你想表示一个特定的时间戳,你应该直接用自纪元以来的秒数构造time_point。以下是实现它的方法:#include

#include <chrono>

int main() {
    std::chrono::system_clock::time_point a;

    // Set the timestamp directly
    a = std::chrono::time_point<std::chrono::system_clock>(std::chrono::seconds(1703063163));

    std::cout << "New: " << std::chrono::system_clock::to_time_t(a) << std::endl;

    return 0;
}

这将输出预期的结果:

New: 1703063163
© www.soinside.com 2019 - 2024. All rights reserved.