转换错误 - 将字符串转换为时间

时间:2012-01-26 12:17:07

标签: c# sql

在我的应用程序中,我有一个数据网格,其中填充了来自SQLserver数据库的信息。除此之外,填充网格的数据包括时间。现在我挣扎了一段时间从数据库中获取数据看起来像我想要的那样。最后我的sql comman包含以下内容: -

LEFT(CONVERT(VARCHAR(8), te.StartTime, 8), 5) AS [Start Time], 
LEFT(CONVERT(VARCHAR(8), te.FinishTime, 8), 5) AS [Finish Time]

以8:00和8的格式很好地显示时间。 10点等 但是,当我需要使用datagrid中的info来计算两次之间的差异时,这会在我的应用程序中导致问题。这是因为(我相信)我的SQL命令(上面)已将时间转换为字符串。因此,当我尝试以下示例时:

DateTime startTime = (DateTime)varValue;
DateTime endTime = (DateTime)varFinish; 

我收到错误消息'invalid cast'。所以我面临将这些字符串转换回DateTime以便用它们执行任何计算。我不能简单地将原始时间字段添加到SQL命令中,因为有时网格中的时间将是用户输入的新时间,因此无论如何它们都是字符串。

我应该如何最好地转换用户输入,例如“8:00”进入日期时间 - 这样我就可以执行两次计算两次之间差异的功能。或者,我应该以不同的方式讨论整个时间表。

任何建议都将不胜感激。你可能已经猜到了,我对C#很陌生。

3 个答案:

答案 0 :(得分:3)

你试过这个吗?

DateTime tmp = DateTime.Now;
DateTime startTime = DateTime.Parse(varValue + " " + tmp.ToShortDateString());
DateTime endTime = DateTime.Parse(varFinish + " " + tmp.ToShortDateString()); 

认为这可以解决您的问题? 您现在在两个参数

中获得了给定时间的当前日期

答案 1 :(得分:2)

我建议您按原样使用日期时间变量,不要在SQL中进行任何转换,并将它们转换为您希望在C#中使用的方式。 您可以使用以下内容:

DateTime d = FetchTimeFromDB(); 
string timeRequired = d.ToString("hh:mm");

答案 2 :(得分:1)

在源(数据库)上以特定格式转换数据是一种非常糟糕的做法,这取决于您需要在UI中显示的内容。 在大多数情况下,这使得您的数据几乎不能用于任何其他目的或格式。

您应该始终尝试将应用层分离并隔离职责。

您的数据库查询应该只返回原始格式的日期/时间信息。 以特定方式显示值是特定于UI的要求,在.NET中您可以使用格式化函数来解决(例如,对于DateTime对象,ToShortTimeString)。

DateTime t = <date/time form database query>
t.ToShortTimeString();  // or t.ToString("hh:mm");
相关问题