Вопрос

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Как целое число секунд (или миллисекунд, в зависимости от обстоятельств)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top