DATETIME начало DATETIME конец
Я умоляю вас использовать вместо этого два значения DATETIME , обозначенные чем-то вроде event_start и event_end .
Время - сложный бизнес
В настоящее время большая часть мира правильно или ошибочно приняла метрическую систему на основе Денери для большинства измерений. В целом это хорошо, потому что, по крайней мере, мы все можем согласиться с тем, что ag, это мл, это кубический см. По крайней мере, примерно так. Метрическая система имеет много недостатков, но, по крайней мере, она неизменно ошибочна на международном уровне.
Однако со временем у нас есть; 1000 миллисекунд в секунду, от 60 секунд до минуты, от 60 минут до часа, 12 часов на каждые полдня, примерно 30 дней в месяц, которые варьируются в зависимости от месяца и даже года, в каждой стране есть свое временное смещение относительно других , формат времени зависит от страны.
Это сложно переварить, но в целом для такого сложного сценария невозможно найти простое решение.
Некоторые углы можно обрезать, но есть такие, где разумнее не
Хотя главный ответ здесь предполагает, что вы храните целое число минут после полуночи, это может показаться вполне разумным, я научился избегать этого на горьком опыте.
Причины для реализации двух значений DATETIME заключаются в повышении точности, разрешения и обратной связи.
Все это очень удобно, когда дизайн дает нежелательные результаты.
Я храню больше данных, чем требуется?
Сначала может показаться, что хранится больше информации, чем мне нужно, но есть веская причина принять этот удар.
Хранение этой дополнительной информации почти всегда в конечном итоге экономит мне время и силы, потому что я неизбежно обнаруживаю, что, когда кому-то говорят, сколько времени что-то заняло, они также захотят узнать, когда и где произошло событие.
Это огромная планета
В прошлом я был виноват в том, что игнорировал то, что на этой планете есть и другие страны, помимо моей. В то время это казалось хорошей идеей, но это ВСЕГДА приводило к проблемам, головным болям и потере времени впустую. ВСЕГДА учитывайте все часовые пояса.
C #
DateTime хорошо отображается в строке в C #. Метод ToString (формат строки) компактен и удобен для чтения.
Например
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
SQL сервер
Кроме того, если вы читаете свою базу данных отдельно от интерфейса приложения, то dateTimes приятно читать с первого взгляда, а выполнение вычислений над ними несложно.
Например
SELECT DATEDIFF(MINUTE, event_start, event_end)
Стандарт даты ISO8601
Если вы используете SQLite, этого у вас нет, поэтому вместо этого используйте текстовое поле и сохраните его в формате ISO8601, например.
«2013-01-27T12: 30: 00 + 0000»
Ноты:
Например
TimeOffset=(±Longitude.24)/360
... где ± относится к восточному или западному направлению.
Поэтому стоит подумать, стоит ли хранить долготу, широту и высоту вместе с данными. Это зависит от приложения.
ISO8601 - это международный формат.
В вики можно найти более подробную информацию по адресу http://en.wikipedia.org/wiki/ISO_8601 .
Дата и время сохраняются в международном формате, а смещение записывается в зависимости от того, где в мире было сохранено время.
По моему опыту, всегда необходимо сохранять полную дату и время, независимо от того, думаю ли я, когда я начинаю проект. ISO8601 - это очень хороший и надежный способ сделать это.
Дополнительная консультация бесплатно
Также стоит сгруппировать события в цепочку. Например, при записи гонки все событие может быть сгруппировано по racer, race_circuit, circuit_checkpoints и circuit_laps.
По моему опыту, также целесообразно определить, кто сохранил запись. Либо как отдельная таблица, заполняемая через триггер, либо как дополнительный столбец в исходной таблице.
Чем больше вы вкладываете, тем больше вы получаете
Я полностью понимаю желание экономить пространство, насколько это возможно, но я редко делал это за счет потери информации.
Эмпирическое правило с базами данных гласит, что, как сказано в названии, база данных может сказать вам столько, сколько у нее есть данные, и может быть очень дорого возвращаться к историческим данным, заполняя пробелы.
Решение состоит в том, чтобы исправить это с первого раза. Это, конечно, легче сказать, чем сделать, но теперь у вас должно быть более глубокое представление об эффективном проектировании базы данных, и впоследствии у вас будет гораздо больше шансов сделать это правильно с первого раза.
Чем лучше будет ваш первоначальный проект, тем дешевле будет впоследствии ремонт.
Я говорю все это только потому, что если бы я мог вернуться в прошлое, то это то, что я бы сказал себе, когда туда попал.