通过std::chrono计算出日期时间后,如何高效获取星期几?
获取星期几的最简实现方案
问题背景
我已经通过std::chrono::local_days计算出日、月、年以及秒、分、时,现需获取星期几。使用的代码如下(注释为自行添加):
auto tp = std::chrono::system_clock::now(); static auto const tz = std::chrono::current_zone(); static auto info = tz->get_info(tp); // 缓存时区信息 if (tp >= info.end) // 时区信息每年最多可能变更两次 info = tz->get_info(tp); auto tpl = std::chrono::local_days{} + (tp + info.offset - std::chrono::sys_days{}); auto tpd = floor<std::chrono::days>(tpl); std::chrono::year_month_day ymd{ tpd }; std::chrono::hh_mm_ss hms{ tpl - tpd };
目前已得到上述时间信息,请问如何以最少的冗余调用获取星期几?
最简实现方式
直接复用已计算好的tpd(本地日期的days类型对象),通过C++20 chrono库的std::chrono::weekday组件即可获取星期几,无需额外冗余调用。
只需在现有代码后添加一行:
std::chrono::weekday wd{ tpd };
细节说明
std::chrono::weekday可直接从代表日期的days实例构造,底层会自动完成星期几的计算逻辑,完全复用已有计算结果。- 获取星期几的两种常用方式:
- 调用
wd.number():返回本地化的星期数字(通常1对应周一、7对应周日,具体取决于系统区域设置)。 - 调用
wd.iso_encoding():返回ISO标准的星期数字(固定1=周一,7=周日)。
- 调用
- 如果需要输出文本形式的星期名称,可配合
std::format(C++20及以上)实现:std::cout << "星期几:" << std::format("{}", wd) << '\n';
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

