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

本文关键字:存储 T-SQL 类型 并在 时间 | 更新日期: 2023-09-27 17:58:35

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

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

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

Francesco

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

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,它可以很容易地转换为TimeSpanTimeSpan interval = TimeSpan.FromMinutes(60))。

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