Обработка и хранение прошедшего времени - PullRequest
6 голосов
/ 17 сентября 2008

У меня проблемы с выбором лучшего способа обработки и сохранения измерений времени.

У меня есть приложение с текстовым полем, которое позволяет пользователям вводить время в формате чч: мм: сс или мм: сс.

Так что я планировал проанализировать эту строку, разбить ее на двоеточия и создать TimeSpan (или использовать TimeSpan.Parse () и просто добавить «00:» в регистр mm: ss) для моей бизнес-логики. Хорошо?

Как мне сохранить это как в базе данных? Каким будет тип поля? DateTime кажется неправильным. Я не хочу, чтобы время 00:54:12 было сохранено как 1901-01-01 00:54:12, которое кажется немного плохим?

Ответы [ 8 ]

8 голосов
/ 17 сентября 2008

TimeSpan имеет свойство Int64 Ticks , которое вы можете сохранить вместо него, и конструктор , который принимает значение Ticks.

3 голосов
/ 17 сентября 2008

Для периодов менее суток, просто используйте секунды, как сказали другие.

Для более длительных периодов, это зависит от вашего двигателя дб. Если SQL Server, до версии 2008 вы хотите дату и время. Это нормально - вы можете просто проигнорировать дату по умолчанию 1/1/1900, которую они все будут иметь. Если вам повезло иметь SQL Server 2008, то вы можете использовать отдельные типы данных Date и Time. Преимущество использования реального типа дата-время / время заключается в использовании функции DateDiff для сравнения длительностей.

3 голосов
/ 17 сентября 2008

Я думаю, что самое простое - просто преобразовать пользовательский ввод в целое число секунд. Так что 54:12 == 3252 секунды, поэтому сохраните 3252 в своей базе данных или где-либо еще. Затем, когда вам нужно отобразить его пользователю, вы можете снова преобразовать его.

0 голосов
/ 17 сентября 2008

и тип int должен делать это, сохраняя его в секундах и анализируя его взад и вперед

http://msdn.microsoft.com/en-us/library/ms187745.aspx

0 голосов
/ 17 сентября 2008

Перейти с целыми числами на секунды или минуты. Секунды, наверное, лучше. Вы никогда не будете пнуть себя за то, что выбрали что-то с большой точностью. Кроме того, для вашего пользовательского интерфейса рассмотрите возможность использования нескольких текстовых вводов, вам не нужно беспокоиться о том, что пользователь действительно правильно введет «:». Также гораздо проще добавить другие ограничения, такие как значения минут и секунд, содержащие 0-59.

0 голосов
/ 17 сентября 2008

Собираете ли вы время начала и время окончания? Если это так, вы можете использовать тип данных «timestamp», если ваша СУБД поддерживает это. Если нет, просто как тип даты / времени. Итак, вы сказали, что не хотите, чтобы часть даты была сохранена - но рассмотрите случай, когда период времени охватывает полночь - вы начинаете в 23:55:01 и заканчиваете в 00:05:14, например - если у вас также есть дата там. Существуют стандартные встроенные функции для возврата истекшего времени (в секундах) между двумя значениями даты и времени.

0 голосов
/ 17 сентября 2008

в виде целого числа секунд (или миллисекунд в зависимости от ситуации)

0 голосов
/ 17 сентября 2008

Большинство баз данных имеют некоторый тип временного интервала. Ответ зависит от того, о какой базе данных вы говорите. Для Oracle это просто число с плавающей точкой NUMBER, которое представляет количество дней (включая дробные дни). Вы можете добавить / вычесть это из любого типа DATE и получить правильный ответ.

...