gpt4 book ai didi

C++ Chrono 判断一天是否是周末?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:02 32 4
gpt4 key购买 nike

我有一个年 (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'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,如果您删除 constexpr , C++11。它不会移植到早于 C++11 的版本,因为它确实依赖于 <chrono> .

对于奖励积分,上述功能也适用于当前时间(UTC):

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

关于C++ Chrono 判断一天是否是周末?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52776999/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com