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

2023-12-10

我刚刚注意到c++20将会有chrono::year。它的构造函数接受一个int在范围中:[-32767, 32767],但是我不清楚这个论点代表什么。

  • 这是否符合tm_year1900年的起源?
  • 也许time_t1970年的起源?
  • 或者也许是在公元原点为 0?

EDIT:
这是理解其含义的关键is_leap功能chrono::year优惠。如果没有起源,就不清楚这里代表的是哪一年。


在 25.8.1 [time.cal.general] 中:

25.8 中的类型描述了民用(公历)日历及其与sys_days and local_days.

其措辞具有挑战性,因为其目的是在不冒犯那些遵循其他日历的人的情况下对公历进行建模(就像 C++ 目前通过 C API 所做的那样)。

我现在也注意到这个词“促产者”规范中缺少,可能应该添加到战略位置。

为了直接回答这个问题,积分与std::chrono::year是 Anno Domini 参考,由教皇格列高利 (Pope Gregory) 在 1582 年定义,但在时间上可以向后和向前运行。当我写这篇文章时,这一年是2018y.

并且(回答下面 Jonathan Mee 的评论),这个程序:

#include <chrono>
#include <iostream>

int
main()
{
    using namespace std;
    using namespace std::chrono;
    const auto foo = 2018y;
    cout << int{foo} << '\n';
}

Outputs:

2018

您可以尝试的现场演示附带条件是"date.h"示例实现将内容放入namespace date代替namespace std::chrono.

我还应该指出,该软件允许用户编写的日历与std::chrono系统。这是一个例子儒略历。还有几个例子here.


最后,简要说明为何将当前年份表示为year{2018}(Anno Domini),而不是year{48} (time_t的 1970 年起源),或year{118} (tm_year1900年起源):

这种哲学在电影中使用时是歇斯底里的。但在软件设计中使用时会变得令人厌烦。这个库试图达到预期的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chrono::year 对象是如何构造的? 的相关文章

随机推荐