gpt4 book ai didi

c++ - 替换 chrono::time_point 的小时?

转载 作者:行者123 更新时间:2023-12-02 01:39:23 27 4
gpt4 key购买 nike

如何仅更改现有 std::chrono::system_clock::time_point 的小时?

例如,假设我想实现这个功能:

void set_hour(std::chrono::system_clock::time_point& tp, int hour) {
// Do something here to set the hour
}

std::chrono::system_clock::time_point midnight_jan_1_2022{std::chrono::seconds{1640995200}};

set_hour(midnight_jan_1_2022, 11);
// midnight_jan_1_2022 is now 11am on Jan 1 2022
....

最佳答案

答案取决于你的意思。最简单的解释是你想取任何日期 tp指向(例如 yyyy-mm-dd hh:MM:ss.fff... ),并创建: yyyy-mm-dd hour:00:00.000... .

另一种可能的解释是yyyy-mm-dd hh:MM:ss.fff...转换为yyyy-mm-dd hour:MM:ss.fff... .

无论哪种情况,C++20 都可以让这变得简单,如果您还没有访问 C++20 <chrono> ,则存在a free, open-source header-only library模拟 C++20 <chrono>并适用于 C++11/14/17。

如果您想将分钟、秒和亚秒字段清零,如第一个解释中所述:

void
set_hour(std::chrono::system_clock::time_point& tp, int hour)
{
using namespace std::chrono;

auto day = floor<days>(tp);
tp = day + hours{hour};
}

即您只需将 time_point 打入地板即可以天为精度,然后添加所需的小时数。

第二种解释稍微复杂一些:

void
set_hour(std::chrono::system_clock::time_point& tp, int hour)
{
using namespace std::chrono;

auto day = floor<days>(tp);
hh_mm_ss hms{tp - day};
tp = day + hours{hour} + hms.minutes() + hms.seconds() + hms.subseconds();
}

在这里,您必须发现并恢复 {分钟,秒,亚秒} 字段,以将它们重新应用到所需的日期(以及所需的 hour )。 hh_mm_ss是 C++20 {hours, minutes, seconds, subseconds}自动将持续时间转换为字段结构的数据结构,以便您可以更轻松地替换小时字段。

这两种解决方案都会为您的示例输入提供相同的答案:

2022-01-01 11:00:00.000000

因为输入已将分钟、秒和亚秒字段归零。

关于c++ - 替换 chrono::time_point 的小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71866011/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com