我想知道如何在C#和T-SQL中存储时间。我知道他们都提供了 DateTime 类型,但我只需要存储 时间 。例如:
var startTime = 9PM;
var endTime = 10PM;
然后从数据库中存储/检索这些值。提前谢谢。
Francesco
答案 0 :(得分:10)
是否在C#中使用DateTime
或TimeSpan
类型来存储9 PM
即可。就个人而言,我使用DateTime
,将日期组件留空,因为这在语义上更接近你想要的。 (TimeSpan
旨在保存时间间隔,例如“21小时”。)
文档支持这两个选项。这来自the documentation of TimeSpan:
TimeSpan结构也可用于表示一天中的时间,但前提是时间与特定日期无关。
另一方面,MSDN文章Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo提到了以下内容:
DateTime结构适用于执行以下操作的应用程序:
*仅使用日期。
*仅与时间合作 [...]
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
,可以轻松转换为TimeSpan
(TimeSpan interval = TimeSpan.FromMinutes(60)
)。
答案 3 :(得分:1)
c#中的Timespan是你操纵时间间隔的方式。与其他海报所说的相反,我不认为时间数据类型对于在SQL中存储时间间隔是正确的,除非您实际上想要存储开始时间和结束时间而不是时间间隔(即您的示例中为1小时) 。它用于存储一天中的某个时间,有点像DateTime但没有日期。当我想在SQL中存储一个时间间隔时,我只使用一个int然后让它代表一个适合我想做的时间的单位(例如,分钟,秒,毫秒等)