C++时间(而不是日期)时间段
C++ time (and not date) period
我想检查当前时间(以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:mm
或hh:mm
的形式,您可以使用(cmp = strlen(x) - strlen(y)) ? cmp : strcmp(x, y)
.
相关文章:
- 查询SQLite数据库中的日期
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- Log4cpp:以UTC/GMT时区打印日期
- 使用C++的日期库读取时间
- 日期格式为C++
- 如何在 C++20 计时中为日期添加天数?
- 如何在QTableView中排序和更改日期格式
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- fmt 与 Howard Hinnant 的日期:为什么从 fmt::to_string "{}"?FMT 和日期的最佳实践?
- 使程序检查当前日期是否=预期日期
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 确定夏令时是否适用于特定日期
- C++日期库因时区而失败
- 向日期运算符添加天数+
- 为什么在C++中获取日期和/或时间如此复杂?
- 如何验证用户输入月份的日期?
- 从编译时已知的日历日期创建"std::chrono::time_point"
- C++时间(而不是日期)时间段