代码之家  ›  专栏  ›  技术社区  ›  intrigued_66

C++时间决定了一天是否是周末?

  •  4
  • intrigued_66  · 技术社区  · 6 年前

    我有一个年(int)、月(int)和日(int)格式的日期,例如2018年10月12日的2018、10、12。

    有没有办法让我用C++的时间库来确定这些“我的日期”是不是周末?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Howard Hinnant    6 年前

    在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())));