在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's datetime lib
. 你只需要
#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一起工作,如果您删除
常量表达式
<chrono>
.
对于加分,上述功能还将与当前时间(UTC)一起使用:
assert(!is_weekend(floor<days>(std::chrono::system_clock::now())));