#castle-activerecord
#castle-activerecord
Вопрос:
Я работаю над проектом, в котором мне нужно отслеживать время, например, «14:15 вечера» без дат. Я использую Castle ActiveRecord. Есть ли способ, которым я могу указать, используя атрибуты Castle, что я хочу, чтобы мое поле было типом данных time в SQL Server 2008? И если да, то что .Какой тип я должен создать для поля? Дата-время?
Кроме того, мне может потребоваться привязать часовые пояса к этим временам. Какой наилучший способ сделать это с использованием Castle ActiveRecord и SQL Server 2008?
Ответ №1:
Согласно документам MSDN, тип данных time соответствует типу TimeSpan .net, а тип NHibernate равен «TimeAsTimeSpan». В ActiveRecord вы бы использовали свойство ColumnType для определения этого, смотрите этот пример.
Если вы хотите включить часовые пояса, я рекомендую вместо этого использовать DateTimeOffset. Я не понимаю, как часовые пояса будут иметь смысл во временном интервале… Или сохраните часовой пояс в отдельном поле и выполните преобразования самостоятельно…
Комментарии:
1. Я, вероятно, сохраню часовые пояса в отдельном поле, просто сохраненном как varchar на основе . Сетевое имя для каждого часового пояса. Что касается самого времени, я экспериментировал с TimeSpan, но хранить его таким образом для меня не имеет особого смысла, поскольку TimeSpan рассчитан на отрезок времени, а не на тактовое время.
2. После дополнительных экспериментов я решил использовать
TimeSpan
(преобразование вtime
тип данных). Основная проблема заключалась в преобразовании туда и обратно междуTimeSpan
и отображением времени (например, «14:00 вечера»). Но, похоже, все работает нормально, если я сначала вызываюDateTime.Parse
строкуTimeSpan
, а затем использую формат «t».