В 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
.
Я также должен отметить, что это программное обеспечение позволяет написанным пользователями календарям взаимодействовать с системой std::chrono
. Вот пример юлианского календаря. Есть еще пара примеров здесь.
Наконец, краткое примечание о том, почему текущий год представлен как year{2018}
(Anno Domini), а не year{48}
(происхождение time_t
в 1970 году) или year{118}
(происхождение tm_year
в 1900 году):
Эта философия кажется истеричной, когда используется в фильмах. Но становится утомительным при использовании в разработке программного обеспечения. Эта библиотека пытается сделать ожидаемое.
person
Howard Hinnant
schedule
18.09.2018