C++时间(而不是日期)时间段

C++ time (and not date) period

本文关键字:日期 时间段 时间 C++      更新时间:2023-10-16

我想检查当前时间(以C++为单位(是否在时间范围内。

我想从元组("12:00"、"17:30"(构造时间范围,即(字符串、字符串(并检查 now (( 的时间是否介于两者之间。

有什么好方法可以做到这一点吗?我不想检查日期,即我不在乎这一天是星期一还是月份是十月。我只在乎时间。

如果元组中的字符串可以强制HH:MM,则可以使用简单的字符串比较(a(。

以下完整程序显示了如何以字符串形式获取当前时间:

#include <ctime>
#include <iostream>
std::string getNowHhMm() {
time_t now = time(0);
struct tm *local = localtime(&now);
char buff[sizeof("hh:mm")];
strftime(buff, sizeof(buff), "%H:%M", local);
return buff;
}
int main() {
std::cout << getNowHhMm() << std::endl;
}

使用该函数,您还可以提供一个以查看它是否是给定范围:

bool isBetween(
const std::string &now,
const std::string &lo,
const std::string &hi
) {
return (now >= lo) && (now <= hi);
}

并调用它:

if (isBetween(getNowHhMm(), lowestTime, highestTime))
std::cout << "It's in the range.n';

而且,为了提高效率,如果您要检查多个范围,请记住存储来自getNowHhMm()的返回值:

std::string now = getNowHhMm();
if (isBetween(now, "00:00", "05:59"))
std::cout << "It's too early to get up.n";
else if (isBetween(now, "06:00", "07:59"))
std::cout << "Time to rise.n";
else if (isBetween(now, "08:00", "11:59"))
std::cout << "Get out of bed, ya lazy slob.n";
else
std::cout << "Sleep in, you're probably already fired.n";

(a(是的,它正在重新发明轮子,但是,考虑到这个轮子是多么简单,我认为这是一个很好的解决方案。

如果你的时间总是hh:mm,memcmp 会这样做。如果您的时间是h:mmhh:mm的形式,您可以使用(cmp = strlen(x) - strlen(y)) ? cmp : strcmp(x, y).