В 25.8.1 [time.cal.general]:
Типы в 25.8 описывают гражданский (григорианский) календарь и его связь с sys_days
и local_days
.
Формулировка этого вопроса была (является) сложной, поскольку цель состоит в том, чтобы смоделировать григорианский календарь (как это делает C ++ в настоящее время через C API), не оскорбляя тех, кто следует другим календарям.
Я такжеЯ только сейчас отмечаю, что слово "proleptic" отсутствует в спецификации и, вероятно, должно быть добавлено в стратегическом месте.
Чтобы прямо ответить на вопрос, интеграл связан с std::chrono::year
является ссылкой Anno Domini, как определено папой Григорием в 1582 году, но работает как вперед, так и вперед во времени.Когда я пишу это, год составляет 2018y
.
И (отвечая на комментарии Джонатана Ми ниже), эта программа:
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
using namespace std::chrono;
const auto foo = 2018y;
cout << int{foo} << '\n';
}
Выходы:
2018
Живая демонстрация, с которой вы можете поэкспериментировать с , при условии, что реализация примера "date.h" помещает вещи в namespace date
вместо namespace std::chrono
.
IСледует также отметить, что это программное обеспечение позволяет написанным пользователем календарям взаимодействовать с системой std::chrono
.Вот пример юлианского календаря .Есть еще пара примеров здесь .
Наконец, краткая заметка о том, почему текущий год представлен как year{2018}
(Anno Domini), а неyear{48}
(происхождение time_t
1970 г.) или year{118}
(происхождение tm_year
1900 г.):
Эта философия истерична при использовании в фильмах.Но становится утомительным, когда используется в разработке программного обеспечения.Эта библиотека пытается сделать ожидаемое.