C++ Chrono 确定一天是否是周末?

C++ Chrono determine whether day is a weekend?

本文关键字:是否是 周末 一天 Chrono C++      更新时间:2023-10-16

我有一个日期,格式为年份(int(,月份(int(和日期(int(,例如,2018,10,12表示2018年10月12日。

有没有办法C++这些整数一起使用 Chrono 库来确定我的"日期"是否是周末?

如果没有,实现这一目标的最简单替代方法是什么?

在 C++20 中,您将能够执行以下操作:

#include <chrono>
constexpr
bool
is_weekend(std::chrono::sys_days t)
{
using namespace std::chrono;
const weekday wd{t};
return wd == Saturday || wd == Sunday;
}
int
main()
{
using namespace std::chrono;
static_assert(!is_weekend(year{2018}/10/12), "");
static_assert( is_weekend(year{2018}/10/13), "");
}

当然,如果输入不是constexpr,那么计算也不能。

据我所知,还没有人发布这个,但是您可以使用 Howard Hinnant 的日期时间库使用此语法抢占先机。 您只需要#include "date/date.h"并将几个using namespace std::chrono;更改为using namespace date;.

#include "date/date.h"
constexpr
bool
is_weekend(date::sys_days t)
{
using namespace date;
const weekday wd{t};
return wd == Saturday || wd == Sunday;
}
int
main()
{
using namespace date;
static_assert(!is_weekend(year{2018}/10/12), "");
static_assert( is_weekend(year{2018}/10/13), "");
}

这将适用于 C++17、C++14,如果您删除constexpr,则 C++11。 它不会移植到 C++11 之前,因为它确实取决于<chrono>.

对于奖励积分,上述函数也适用于当前时间 (UTC(:

assert(!is_weekend(floor<days>(std::chrono::system_clock::now())));