如何用当前年份填充 chrono::year?

Posted

技术标签:

【中文标题】如何用当前年份填充 chrono::year?【英文标题】:How can I Populate a chrono::year With the Current 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 ;

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

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于如何用当前年份填充 chrono::year?的主要内容,如果未能解决你的问题,请参考以下文章

chrono::year 对象是如何构造的?

如何从 C++ 中的 std::chrono::year_month_day 获取工作日编号

如何用jQuery实现输入身份证号码后,出生日期自动生成

如何用本地目录中的 AVPlayerItem 类型的元素填充数组

如何用分支结构计算年份

如何用空格 printf() 填充值?