You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何从std::chrono::year_month_day获取星期数值用于计算

解决方案

C++20标准std::chrono库、Howard Hinnant的date库的实现方式完全一致:
weekday类型提供了两个成员方法直接提取数值结果:

  • c_encoding():返回值范围为0~6,对应周日为0、周六为6,和你用%w格式化输出的结果完全匹配,符合你的需求
  • iso_encoding():返回值范围为1~7,对应周一为1、周日为7,适合需要ISO星期标准的场景

代码示例

C++20 标准库版本

#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    using namespace std::chrono;
    year_month_day dmy;
    cin >> parse("%d %m %Y", dmy);
    // 直接获取0-6的星期数值
    unsigned weekday_num = weekday{dmy}.c_encoding();
    // 你的计算逻辑示例
    int total_score = static_cast<int>(weekday_num) * 10;
    cout << total_score << '\n';
}

Howard Hinnant date库(C++17环境)版本

仅需要调整命名空间即可,接口完全一致:

#include "date/date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std;
    year_month_day dmy;
    cin >> parse("%d %m %Y", dmy);
    unsigned weekday_num = weekday{dmy}.c_encoding();
    int total_score = static_cast<int>(weekday_num) * 10;
    cout << total_score << '\n';
}

注意事项

c_encoding()和iso_encoding()的返回值类型为unsigned,参与整数计算时如果需要使用int类型,建议显式做类型转换避免编译器告警。

内容的提问来源于stack exchange,提问作者MarkR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:24:06