我的日期格式为年 (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 的日期时间库 https://github.com/HowardHinnant/date。你只需要#include "date/date.h"
并改变一些using namespace std::chrono;
to 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())));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)