2014-10-24 2 views
0

У меня есть следующий код, который считывает данные с устройства чтения данных SQL и помещает его в коллекцию.Невозможно разобрать дату и время отдельно

while (sdr.Read()) 
{ 
    itemFeed.Add(new Item 
    { 
     itemTypeId = (int)sdr.GetValue(0), 
     itemDate = (DateTime)sdr.GetValue(5), //Incoming: 2014-09-07 
     itemTime = (DateTime)sdr.GetValue(6), //Incoming: 21:29:18.1030000 
    }); 
    i++; 
} 

Проблема, когда входящее значение 2014-09-07 преобразуется в дате время он автоматически добавляет время к нему, и он становится 2014-09-07T00:00:00, и для литья времени он не из-за недопустимый формат.

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

+1

Какие типы это в базе данных (и на какой платформе базы данных)? –

+0

'date' и' time' в 'SQL Server 2012' – Maven

ответ

1

Вы, вероятно, следует хранить один datetime (или datetime2) в базе данных, а не отдельных date и time полей. Но для решения проблемы литья - подумайте, что time в SQL Server сопоставляется с TimeSpan в .NET.

var date = (DateTime)sdr.GetValue(5); 
var time = (TimeSpan)sdr.GetValue(6); 
var dateTime = date.Add(time); 
+0

Thankyou. Я сохранил их отдельно, поэтому я мог выполнять поиск по «дате» и «времени» отдельно. Вы решили мою проблему с кастингом, но проблема с тем, что мой объект даты .net получает пустую метку времени во время кастинга. – Maven

+2

Там нет работы. .NET имеет только тип DateTime. Нет типа для даты без времени. В библиотеке [Noda Time] (http://nodatime.org) есть 'LocalDate', но вам придется проходить через' DateTime' сначала, так как вы приходите с SQL. –

Смежные вопросы