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
相关产品推荐
相关产品推荐

