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

通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:20:00