2013-09-29 40 views
0

我从Excel文件读取和保存内容到数据库转换HH:MM:SS字符串转换日期时间

列的一个包含视频的长度以这种格式

HH:MM:SS

我写这篇文章的代码到目前为止

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 0时09分21秒” 当当前execl的列中的值是:“0时09分21秒“

”30/12/1899“从哪里来?为什么字符串未被识别为有效的DateTime?

我可以只保存格式HH:mm:ss到sql server吗?

+1

你的文化是什么? –

+0

它将此字段视为日期时间值并将其格式化为仅显示时间。 – Hogan

+0

使用['TimeSpan'](http://msdn.microsoft.com/zh-cn/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

确定是否解决了错误。也许我采取错误的做法,我希望将来有能力总结所有视频的时间,哪些数据键入我应该存储在SQL Server中以完成任务? – baaroz

+0

@baaroz - 这取决于SQL Server的版本,而且是另一个问题 - 您应该将其作为问题发布。 – Hogan

2

因为你没跟InvariantCulture给我们任何有关您CultureInfo,在这里;

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

的问题在于:Excel没有时间字段,自动转换时间,日期时间字段。 如果课程日期是“空”的,这意味着它的最小日期为Excel - 30/12/1899

而且你不必调用的ToString方法,因为对象已经是一个DateTime

1

使用TimeSpan结构来保存一个时间值。 A DateTime包含日期和时间。

+0

你能举例如何从excel行只保存HH:mm:ss吗?它可以存储在SQL服务器下的日期时间数据类型? – baaroz

+0

'TimeSpan.ParseExact'应该能够转换字符串'time'中值的最后8个字符。 SQL Server ['time'](http://msdn.microsoft.com/zh-cn/library/bb677243.aspx)数据类型支持小于24小时的值。 – HABO

相关问题