键入以在C#中存储时间和在T-SQL中存储相应的类型

时间:2011-06-08 12:03:40

标签: c# tsql time

我想知道如何在C#和T-SQL中存储时间。我知道他们都提供了 DateTime 类型,但我只需要存储 时间 。例如:

var startTime = 9PM;
var endTime = 10PM;

然后从数据库中存储/检索这些值。提前谢谢。

Francesco

4 个答案:

答案 0 :(得分:10)

C#

是否在C#中使用DateTimeTimeSpan类型来存储9 PM即可。就个人而言,我使用DateTime,将日期组件留空,因为这在语义上更接近你想要的。 (TimeSpan旨在保存时间间隔,例如“21小时”。)

文档支持这两个选项。这来自the documentation of TimeSpan

  

TimeSpan结构也可用于表示一天中的时间,但前提是时间与特定日期无关。

另一方面,MSDN文章Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo提到了以下内容:

  

DateTime结构适用于执行以下操作的应用程序:
     *仅使用日期。
     *仅与时间合作      [...]


T-SQL

SQL Server具有time数据类型。

答案 1 :(得分:2)

在C#中,没有一种类型只能保留一段时间。有TimeSpan,但它的目的是保留一段时间,而不仅仅是DateTime的组成部分(即小时和分钟)。

从SQL Server 2008开始,有一个time类型(Using Date and Time Data 仅存储时间组件。

编辑:首先误读你的问题。 TimeSpan正是您正在寻找的内容,它可以使用SQL 2K8存储在time类型中。

答案 2 :(得分:1)

在C#中,如果您只想存储时间 interval ,则可能需要使用TimeSpan结构。但是,您似乎希望显示存储开始时间和结束时间,这需要存储两个值。因此,您可以使用两个TimeSpans(基于,例如,从午夜开始的分钟数来表示时间),或者您可以使用两个DateTime值并丢弃日期组件。

如前所述,SQL Server 2008具有Time数据类型,但在只有DateTime的早期版本中不可用。您还可以存储一个代表午夜过后分钟数的Int,可以轻松转换为TimeSpanTimeSpan interval = TimeSpan.FromMinutes(60))。

答案 3 :(得分:1)

c#中的Timespan是你操纵时间间隔的方式。与其他海报所说的相反,我不认为时间数据类型对于在SQL中存储时间间隔是正确的,除非您实际上想要存储开始时间和结束时间而不是时间间隔(即您的示例中为1小时) 。它用于存储一天中的某个时间,有点像DateTime但没有日期。当我想在SQL中存储一个时间间隔时,我只使用一个int然后让它代表一个适合我想做的时间的单位(例如,分钟,秒,毫秒等)