Я не знаю внутренних деталей календарных систем, но я уверен, что трудно не недооценить их тонкие сложности. Уже одно это заставило бы меня не хотеть смешать реализацию в иерархии классов.
Я бы пошел с
- отдельные классы (типы)
- необязательные неявные преобразования
- общие утилиты из класса политики / стратегии, чтобы избежать нежелательного дублирования кода
PS. В классическом смысле «Лискова» у вас может быть абстрактный базовый класс Date, который просто «называет» понятия, общие для всех (большинства?) Календарных систем. Тем не менее, я действительно сомневаюсь, что будет добавленной стоимостью. Я мог видеть, что это приводит к большой путанице (он предлагает коду смешивать подтипы Date в любом или во всем коде, и весь код, использующий ваши классы datetime, должен быть всегда подготовлен для обработки всей гаммы).
Кстати, взгляните на Время Ноды и Время Йоды . Считается, что эти уважаемые библиотеки особенно хорошо разработаны.