2013-09-29 7 views
0

Я читаю из Ехчел и сохранить содержимое в базу данныхПреобразовать HH: MM: SS строку в DateTime

один из столбца содержит длину видео в этом формате

чч: мм: сс

я пишу этот код до сих пор

string time = oledbReader[6].ToString(); 
DateTime streamingTime = DateTime.ParseExact(time, 
          "HH:mm:ss", 
          System.Globalization.CultureInfo.CurrentCulture); 

я получаю сообщение об ошибке:

String was not recognized as a valid DateTime.

Я попробовал режим отладки, и я вижу значение: «30/12/1899 00:09:21» в переменной время , когда значение в текущем столбце execl является: "00:09:21 "

Откуда берутся« 30/12/1899 »? Почему строка не была признана действительной DateTime?

Могу ли я сохранить только формат HH: mm: ss в sql server?

+1

Какова твоя культура? –

+0

Он обрабатывает это поле как значение даты и времени и форматирует его только для отображения времени. – Hogan

+0

Используйте структуру ['TimeSpan'] (http://msdn.microsoft.com/en-us/library/system.timespan.aspx), чтобы сохранить значение времени. «DateTime» включает как дату, так и время. – HABO

ответ

2

Попробуйте это, просто взломайте как мой комментарий выше.

string time = oledbReader[6].ToString().Split(" ".ToCharArray())[1]; 
DateTime streamingTime = DateTime.ParseExact(time, "HH:mm:ss",System.Globalization.CultureInfo.CurrentCulture); 

или вы могли бы разобрать его, как это ...

DateTime streamingTime = DateTime.ParseExact(time, "dd/MM/yyyy HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture); 
+0

ОК, что slove ошибка. Может быть, я ошибаюсь, я хочу, чтобы в будущем была возможность суммировать время всех видеороликов, какие данные тип должен храниться в sql-сервере для выполнения задачи? – baaroz

+0

@baaroz - Это зависит от версии SQL Server, и это действительно другой вопрос - вы должны опубликовать его как вопрос. – Hogan

2

Поскольку вы не дали нам никакой информации о вашем CultureInfo, здесь с InvariantCulture;

string time = "30/12/1899 00:09:21"; 
DateTime streamingTime = DateTime.ParseExact(time, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 
Console.WriteLine(streamingTime); 

Выход будет;

12/30/1899 12:09:21 AM 

Здесь в DEMO.

Для получения дополнительной информации, ознакомьтесь с Custom Date and Time Format Strings

+2

Это материал следующего уровня, бросающийся в демо! +1. Вы заставляете всех остальных выглядеть плохо! :) – paqogomez

+0

Его объект-читатель уже датирует время, поэтому синтаксический анализ является избыточным –

0

Проблема заключается в том, что первенствует не имеет поля времени и автоматически конвертировать время времени даты поля. Если дата курс «пустой», что означает, что ее минимальный срок первенствует - 30/12/1899

Более того, вы не должны вызывать методы ToString, поскольку объект уже Задан

1

Используйте TimeSpan Структура для хранения значения времени. A DateTime содержит как дату, так и время.

+0

Можете ли вы привести пример, как удерживать только HH: mm: ss из строки excel? Может ли он храниться в sql-сервере под datetime datatype? – baaroz

+0

'TimeSpan.ParseExact' должен иметь возможность конвертировать последние 8 символов значения в строку' time'. Тип данных SQL Server ['time'] (http://msdn.microsoft.com/en-us/library/bb677243.aspx) поддерживает значения менее 24 часов. – HABO

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