Библиотека для работы с историческими (большими) датами и временем (например, 11 043 г. до н.э.)?

Есть ли библиотека для работы с историческими (большими) датами (например, 11 043 г. до н.э.)? Получить век, тысячелетие?

Ответы

Ответ 1

Для дат и времени в целом существуют стандартные классы времени С++ 11, а библиотека Glib предлагает класс GDateTime с привязкой к С++ Glib:: DateTime в glibmm. Возможно, библиотеки Boost имеют аналогичный интерфейс.

Если вам нужны исторические даты, например, когда были динозавры, вы можете написать свой собственный простой класс (если только один из вариантов, о которых я говорил, достаточно хорош, и в этом случае очень легко вычислить столетие или тысячелетие).

Изменить: большинство реализаций представляют время как число секунд или микросекунд во время Unix, т.е. с 1970 года, что означает, что даже 64-битное целое число может быть неспособным представлять древние времена (вы можете попытаться вычислить или выполнить поиск в Интернете или чтение в Википедии об этих ограничениях).

В этом случае хорошим решением может быть использование отдельного класса AncientTime, который имеет только год, и что-нибудь еще, что вам нужно, например, месяц/день/час, можно использовать с помощью простого класса standtime DateTime, в котором вы можете игнорировать год или поддерживать нормализацию до 0 через тонкую упаковку.