键入以在C#中存储时间,并在T-SQL中存储相应的类型
本文关键字:存储 T-SQL 类型 并在 时间 | 更新日期: 2023-09-27 17:58:35
我想知道如何在C#和T-SQL中存储时间。我知道它们都提供DateTime类型,但我只需要存储时间。例如:
var startTime = 9PM;
var endTime = 10PM;
然后从数据库中存储/检索这些值。提前谢谢。
Francesco
C#
在C#中使用DateTime
还是TimeSpan
类型来存储9 PM
取决于口味。就我个人而言,我会使用DateTime
,将日期组件留空,因为这在语义上更接近于您想要的内容。(TimeSpan
被设计为保持时间间隔,例如"21小时"。)
文档支持这两种选项。这来自TimeSpan:的文档
TimeSpan结构也可用于表示一天中的时间,但前提是时间与特定日期无关。
另一方面,MSDN的文章"在DateTime、DateTimeOffset和TimeZoneInfo之间选择"提到了以下内容:
DateTime结构适用于执行以下操作的应用程序:
*仅使用日期
*只按时间工作
[…]
T-SQL
SQL Server具有time
数据类型。
在C#中,没有一个类型只包含一个时间。有TimeSpan
,但它旨在保留一段时间,而不仅仅是DateTime
的一个组成部分(即小时和分钟)。
从SQL Server 2008开始,有一种time
类型(使用日期和时间数据)只存储时间组件。
编辑:一开始你的问题读错了。TimeSpan
正是您想要的,它可以用SQL 2K8存储在time
类型中。
在C#中,如果您只想存储时间间隔,则可能需要使用TimeSpan结构。但是,您似乎希望显示为存储开始时间和结束时间,这需要存储两个值。因此,您可以使用两个TimeSpans
(例如,基于从午夜开始的分钟数来表示时间),也可以只使用两个DateTime
值并丢弃日期组件。
如前所述,SQL Server 2008具有Time数据类型,但这在只有DateTime
的早期版本中不可用。您也可以只存储一个代表午夜过后分钟数的Int
,它可以很容易地转换为TimeSpan
(TimeSpan interval = TimeSpan.FromMinutes(60)
)。
c#中的时间跨度是操作时间间隔的方式。与其他海报所说的相反,我认为时间数据类型不适合在SQL中存储时间间隔,除非您实际上想存储开始时间和结束时间,而不是时间间隔(例如,在您的示例中为1小时)。它用于存储一天中的时间,有点像DateTime,但没有日期。当我想在SQL中存储时间间隔时,我只需要使用int,然后让它代表适合我尝试做的事情的时间单位(例如,分钟、秒、毫秒等)