【问题标题】:How can I Populate a chrono::year With the Current Year?如何用当前年份填充 chrono::year?
【发布时间】:2019-02-22 23:09:45
【问题描述】:

所以我从this question 了解到,用于构造chrono::year 的整数对应于0 的Anno Domini 原点。

所以我的问题是,如果我想获得当前的chrono::year 怎么办?有那个功能吗?我显然可以做到:

const auto time = std::time(nullptr);
const auto current_date = *std::gmtime(&time);
const chrono::year foo{ current_date.tm_year + 1900 };

但这似乎是一个相当复杂的过程。有什么更好的可供我使用吗?

【问题讨论】:

    标签: c++ date epoch chrono c++20


    【解决方案1】:
    using namespace std::chrono;
    year_month_day ymd = floor<days>(system_clock::now());
    const year foo = ymd.year();
    

    【讨论】:

    • 哇,太聪明了。我喜欢从 C 的时间库中涉及的所有指针传递中解脱出来的想法。
    • Fwiw,我赞成这个答案。但我也想澄清一下,这是UTC 的当前年份。如果您希望当前年份位于特定时区,则可以使用chrono::zoned_time(并且偶尔会给您不同的答案)。执行此操作的代码本质上是此答案中提供的代码的超集。
    • 允许year_month_day ymd = floor&lt;days&gt;(system_clock::now()) 的演员表是什么?我没有看到 time_pointyear_mont_day 之间的转换。
    • year_month_day 有一个隐式的 constexpr noexcept 构造函数,采用单个参数 const sys_days&amp;sys_days 只是 time_point&lt;system_clock, days&gt; 的类型别名。 floor&lt;days&gt;(...)system_clock::time_point 转换为 sys_days
    【解决方案2】:

    这是另一种方式:

    auto now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now);
    struct tm *parts = std::localtime(&now_c);
    std::cout << 1900 + parts->tm_year  << std::endl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多