Ответ 1
Вы можете посмотреть noda-time, порт Joda-time для .NET, который обрабатывает исторические даты (но вы 'все равно придется справляться с настойчивостью).
Я планирую создать приложение временной шкалы, которое хранит и отображает информацию для определенных дат. Например: Аристотель 384 г. до н.э. - 322 г. до н.э.; но также даты размещения, такие как Immanuel Kant 22.04.1724 - 12.02.1804).
Я хочу использовать базу данных sql compact edition. Формат даты и времени позволяет датировать даты с 1/1/1753 12: 00: 00: 00 AM до 12/31/9999 11:59:59 PM. Поэтому я не могу использовать формат родного datetime. .Net также не разрешает даты bc использовать собственный класс DateTime (0001.01.01 - это первый день).
Должен ли я определять свой собственный формат с помощью столбца varchar и в .Net анализировать эти значения?
Вы можете посмотреть noda-time, порт Joda-time для .NET, который обрабатывает исторические даты (но вы 'все равно придется справляться с настойчивостью).
Лучший совет здесь - не полагаться на значения Microsoft для значений даты и времени. Лучшее решение - написать свой собственный класс даты Julian и обработать конверсию с письменной даты (например, выше с Аристотелем) на юлианскую дату.
1/1/322 BC = 1603447,5
1/1/384 BC = 1580801,5
Sub GetJD(mn%, dy%, yr%, ByRef JD#)
Dim c#
c# = 12# * (yr% + 4800) + mn% - 3
JD# = Int(c# / 48) + Int((365 * c# + 2 * (c# - 12 * Int(c# / 12)) + 7) / 12) + dy% - 32083
If JD# > 2299170! Then JD# = JD# + Int(c# / 4800) - Int(c# / 1200) + 38
JD# = JD# - 0.5 ' = 0 hrs GMT
End Sub
Сохраните год отдельно как целое число со знаком. Если вам нужна конкретная дата в течение этого года, держите отдельный столбец datetime и просто используйте стандартное значение для части года (обычно 1900).