【发布时间】:2020-01-03 05:43:01
【问题描述】:
TL;DR:如何使用std::chrono::system_clock::time_point 仅基于某些参数进行比较(例如,我只需要小时、分钟和秒,而不是日、月等)。
另外:将std::chrono::system_clock::time_point 转换为std::tm 后,std::tm.tm_hours 包含的值比std::chrono::system_clock::time_point 的原始输入值高一。
我让std::chrono::system_clock::time_point 工作的理论方法:
typedef std::chrono::system_clock::time_point TimePoint;
TimePoint MainWindow::createTimePoint(int h, int m)
{
TimePoint createdTime = std::chrono::system_clock::time_point{std::chrono::hours(h) + std::chrono::minutes(m)};
time_t tt = std::chrono::system_clock::to_time_t(createdTime);
tm timeExtracted = *localtime(&tt);
std::cout << "input:\t\t" << "H = " << h << ", M = " << m << std::endl;
std::cout << "timeExtracted:\t" << "H = " << timeExtracted.tm_hour << ", M = " << timeExtracted.tm_min << std::endl;
return createdTime;
}
如果我运行它,timeExtracted 的小时数始终是输入 h 的 +1。
为什么会这样?以及如何解决这个问题?我查看了其他一些显示此问题的帖子,但他们无法帮助我。可能也是因为这个:
我认为当我创建TimePoint时,日、月等也设置为随机值或初始化为某个值。关键是:我希望它们始终是相同的值,以便我的TimePoint(转换后)基本上显示:
timeExtracted.tm_sec = 0
timeExtracted.tm_min = m
timeExtracted.tm_hour = h
timeExtracted.tm_mon = 0
timeExtracted.tm_wday = 0
timeExtracted.tm_mday = 0
timeExtracted.tm_yday = 0
timeExtracted.tm_year = 0
timeExtracted.tm_isdst = 0
如何使用 std::chrono 的比较操作比较其中两个 TimePoint,但只比较小时和分钟。
如果我的问题不清楚,很抱歉,已经很晚了。我明天早上再检查一次。谢谢。
【问题讨论】:
-
你在哪个时区?对于奇怪的与时间相关的行为,我总是首先看到的是是否存在来自区域设置/时区的某些东西导致问题。
-
当您谈到小时和分钟等“字段”时,您是指您当地的时区吗?因为
system_clock是UTC。如果在 UTC 中比较是可以的,那是一个答案。如果您需要在当地时区进行比较,那就另当别论了。 -
@1201ProgramAlarm 哦,好吧。我会调查的。谢谢!