我只是注意到c++20将有chrono::year
。它的构造函数接受范围内的int
:[ - 32767,32767],但是我不清楚这个参数代表什么。
tm_year
的1900年起源一致?time_t
1970年的起源?编辑:
这是理解is_leap
函数chrono::year
提供的含义的关键。没有起源,不清楚这里代表的是哪一年。
在25.8.1 [time.cal.general]中:
25.8中的类型描述了民间(格里高利)日历及其与
sys_days
和local_days
的关系。
关于这个问题的措辞具有挑战性,因为其意图是对公历进行建模(C ++目前通过C API进行建模),而不会冒犯跟随其他日历的人。
我现在还注意到规范中缺少"proleptic"这个词,应该在战略位置添加。
为了直接回答这个问题,与std::chrono::year
相关的积分是Anno Domini的参考,正如教皇格雷戈里在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';
}
输出:
2018
Live demo that you can experiment with的条件是"date.h"的例子实现把东西放在namespace date
而不是namespace std::chrono
。
我还应该注意,该软件允许用户编写的日历与std::chrono
系统进行互操作。这是Julian calendar的一个例子。还有一些例子here。
最后,简要说明为什么今年代表year{2018}
(Anno Domini),而不是year{48}
(time_t
的1970年出身),或year{118}
(tm_year
的1900年起源):
This philosophy在电影中使用时是歇斯底里的。但在软件设计中使用时会变得很烦人。这个库试图做到预期的。