Ответ 1
Для дат и времени в целом существуют стандартные классы времени С++ 11, а библиотека Glib предлагает класс GDateTime с привязкой к С++ Glib:: DateTime в glibmm. Возможно, библиотеки Boost имеют аналогичный интерфейс.
Если вам нужны исторические даты, например, когда были динозавры, вы можете написать свой собственный простой класс (если только один из вариантов, о которых я говорил, достаточно хорош, и в этом случае очень легко вычислить столетие или тысячелетие).
Изменить: большинство реализаций представляют время как число секунд или микросекунд во время Unix, т.е. с 1970 года, что означает, что даже 64-битное целое число может быть неспособным представлять древние времена (вы можете попытаться вычислить или выполнить поиск в Интернете или чтение в Википедии об этих ограничениях).
В этом случае хорошим решением может быть использование отдельного класса AncientTime, который имеет только год, и что-нибудь еще, что вам нужно, например, месяц/день/час, можно использовать с помощью простого класса standtime DateTime, в котором вы можете игнорировать год или поддерживать нормализацию до 0 через тонкую упаковку.