Каков наилучший способ обработки дат bc в сервере .net/sql?

Я планирую создать приложение временной шкалы, которое хранит и отображает информацию для определенных дат. Например: Аристотель 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 анализировать эти значения?

Ответы

Ответ 1

Вы можете посмотреть noda-time, порт Joda-time для .NET, который обрабатывает исторические даты (но вы 'все равно придется справляться с настойчивостью).

Ответ 2

Лучший совет здесь - не полагаться на значения 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

Ответ 3

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