Сравнение дат AC и BC
Вопрос
У меня есть реализация пролога, которая позволяет мне сравнивать точки времени в событиях, используя представление на основе проловых отношений 13 отношений Аллена. Каждое событие имеет начальную точку (YYYY-MM-DD) и конечную точку (yyyy-mm-dd), и я могу проверить, одновременно произошли только два события, или одна - до другой, и т. Д. 1555-12-03 до 1555-12-04). Это работает хорошо с так называемыми датами переменного тока (Anno Domini), но теперь у меня есть хорошее количество событий, которые произошли BC (до Христа). Какой лучший способ обрабатывать эти события BC и иметь возможность сказать, например, что основание Афин (BC 1556) до рождения колума (1451) ..... Любая идея более чем приветствуется.
Спасибо,
Я.
Решение
Как вы храните свою дату? Если это в вашей собственной структуре, то включите рекламу или до нашей эры и используйте это как своего рода негативный флаг, до н.э., лечащиеся в возрасте отрицательных лет, лечащиеся на годы.
Другие советы
Я считаю, что он спрашивает, хранятся ли ваши даты в различных предикатах или если они указаны только в одном предикате даты, например, a_date (12345, "12-24-2011"), где первое поле - это поле ID. То есть вы храните даты как что-то вроде
a_date (event_id, date_value)
Где формат Date_Value является yyyy-mm-dd?
Одно решение: требуют «AD» или «BC» в строке даты, причем «до нашей эры» по умолчанию «BC» и лечение отсутствия как «AD».
Другое решение: создать новую предикат даты, позвоните
a_date (date_id, date_value, флаг)
где флаг либо BC или AD. Если флаг объявлен объявление, математика продолжается как обычно. Если флаг является до нашей эры, ветвь в новый код, который делает соответствующую математику. Существующие предикаты даты формы a_date (event_id, date_value) будут интерпретировать как a_date (event_id, date_value, "ad")
То есть в коде
a_date (event_id, date_value): = a_date (event_id, date_value, "ad")