我将静态日期输入 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
这是什么原因?
这里的问题与以下事实有关: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