如何构建chrono :: year对象?

问题描述 投票:4回答:1

我只是注意到将有chrono::year。它的构造函数接受范围内的int:[ - 32767,32767],但是我不清楚这个参数代表什么。

  • 这是否与tm_year的1900年起源一致?
  • 或者也许是time_t 1970年的起源?
  • 或者也许它在Anno Domini有0起源?

编辑: 这是理解is_leap函数chrono::year提供的含义的关键。没有起源,不清楚这里代表的是哪一年。

c++ date time epoch chrono
1个回答
6
投票

在25.8.1 [time.cal.general]中:

25.8中的类型描述了民间(格里高利)日历及其与sys_dayslocal_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在电影中使用时是歇斯底里的。但在软件设计中使用时会变得很烦人。这个库试图做到预期的。

© www.soinside.com 2019 - 2024. All rights reserved.