Отрицательная дата в С# и sql

Я делаю программу С# с базой данных SQL Server, и мне трудно выбрать из всех предложенных решений обработку отрицательных и положительных дат. На самом деле, вот решения, которые я нашел вокруг:

  • Используйте логическое значение, чтобы указать BC или AC;
  • сохранить компоненты даты (jj, mm, (-) aaaa) как int и создать класс, который обрабатывает проверку, чтобы увидеть, существует ли дата или нет.

Я уверен, что есть и другие способы, показанные там, но на самом деле это наиболее понятные способы для меня.

Программное обеспечение предназначено для помощи с днями рождения книг персонажей и другими действиями персонажей в книгах. Итак, скажем, начальная дата книги «01.10.0023» (jj/mm/aaaa), что является началом эпохи, в которой находятся персонажи, и персонажу на тот момент уже 80 лет, он родился. 03.02.0057".

Мой вопрос сосредоточен вокруг того, какое из двух приведенных выше решений будет работать лучше всего в этом контексте. Я прочитал статью, связанную со мной, но я не совсем понимаю, как, например, программное обеспечение может обрабатывать символы от старшего к младшему и проверять, что дата рождения не предшествует дате смерти, что не было бы смысла...

Надеюсь, это разъяснит мой вопрос?

Я искренне благодарю всех, кто найдет время, чтобы прочитать это.


person Djenny Floro    schedule 07.03.2014    source источник
comment
возможный дубликат Что такое лучший способ обработки дат bc на сервере .net/sql?   -  person GarethD    schedule 07.03.2014
comment
Я изменю свой вопрос, так как это частично ответит мне. Спасибо, что указали мне на это, я пропустил это в своем поиске.   -  person Djenny Floro    schedule 07.03.2014
comment
@GarethD с этими изменениями, вы лучше видите, почему это не дубликат, или вы думаете, что я пропустил момент в сообщении, который должен мне ответить?   -  person Djenny Floro    schedule 07.03.2014


Ответы (1)


Затем я бы предложил вам хранить даты в виде числа в формате ISO: ГГГГММДД.

Таким образом, вы сможете хранить даты до нашей эры как -ГГГГММДД и AD как ГГГГММДД. Это также упрощает сравнение дат:

eg. if ( -00801012 < 00110214 ) { ... } or if ( 19741015 < 20140228 ) { ... }

Вам нужно будет подтвердить сигнал, когда вы хотите показать дату на экране. boolean isAD = false; If ( mydate > 0 ) { isAD = true; }

и вы бы использовали абс для форматирования даты

person Ricardo Appleton    schedule 07.03.2014
comment
Это решение на самом деле неплохое, это то, что мне нужно. Но не могли бы вы подсказать мне, как, например, экранировать год? Я борюсь с тем, как разбить формат ISO на год, день и месяц... извините. - person Djenny Floro; 07.03.2014
comment
@Ricado Appleton Считаете ли вы, что это: pastebin.com/jj6PKCnZ правильно использует ваш ответ? Я не уверен, что переход от строки к int, а затем от int к строке довольно хорош. - person Djenny Floro; 07.03.2014
comment
Получил, что эта часть работает как шарм, спасибо за помощь - person Djenny Floro; 07.03.2014
comment
Имейте в виду, что если год вашей даты меньше 1000, этот класс не будет работать должным образом. Например. дата 07001012 в виде int сохраняется как 7001012, и если вы получите первые четыре символа, вы получите 7001, а не 0700. Сначала вы должны подтвердить сигнал вашей строки и подушечки слева от 0 до 8 в длину. Что-то вроде time.ToString().PadLeft(8, '0').Substring(0, 4); - person Ricardo Appleton; 10.03.2014