c++ - C ++ Chrono确定一天是否是周末?
问题描述
我有一个格式为年 (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 的 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,如果您删除了constexpr
C++11。它不会移植到 C++11 之前的版本,因为它确实依赖于<chrono>
.
对于奖励积分,上述函数也适用于当前时间(UTC):
assert(!is_weekend(floor<days>(std::chrono::system_clock::now())));
推荐阅读
- javascript - "Cannot read property 't' of undefined" error when using vuetify v-carousel component
- spring-boot - How to validate headers in Spring WebFlux using Filters
- javascript - Test failing only in headless chrome
- python - 我们可以在 Linux 中使用没有 cx_Oracle 的 python 连接到 oracle 数据库吗
- python - 无法将命令的输出重定向到输出文件
- esper - 当 ON-SELECT 查询或其他子句没有结果时如何要求 esper 调用更新
- android - Android TV (Leanback) 应用程序中的类似权限对话框的 AlertDialog
- split - sql aggregate and split
- python - 如何将一个列表的内容复制到剪贴板?
- vb.net - 如何通过 vb.net 执行 cmd 命令?