我想在 SQLite DB(使用 C#)中创建一个字段来存储所用时间(持续时间)字段。该值将采用hr:min:sec
格式,例如'10:10:00'
表示 10 小时、10 分钟和 00 秒。我应该为此使用哪种数据类型?我知道DateTime
这还不够,因为它用于存储日期时间。
3 回答
TimeSpan
在 C# 中使用 a 。这意味着表示经过的持续时间,这就是您所描述的。
在 SQLite 中,您应该存储一个INTEGER
类型,以便您的数据是可排序的。你只需要决定你需要什么粒度。
例如,TimeSpan.Ticks
如果您关心尽可能精确的绝对精度,您可以存储 。为此,您需要INTEGER
8 个字节。加载时,您可以使用TimeSpan.FromTicks
或构造函数new TimeSpan(ticks)
。
更有可能的是,您需要存储整数秒,您可以从TimeSpan.TotalSeconds
. 您可能会INTEGER
为此使用 4 个字节。加载时,您可以使用TimeSpan.FromSeconds
整数重新创建时间跨度。
DateTime
orTimeSpan
会绰绰有余,但 SQLite 不支持它们。
在 SQLite 中,可能的数据类型是TEXT
、INTEGER
和(分别相当于 .NET 、REAL
和数组)。BLOB
String
Int64
Double
Byte
您所要做的就是操作您的 C#DateTime
或TimeSpan
您喜欢的 SQLite 数据类型。
我认为@Matt Johnson 的答案是最合适的,但是,我提出了另一种方法。就我而言,问题有点不同。我必须存储餐厅的预订信息,其中包括以下两个字段:
日期时间开始日期时间
时间跨度持续时间
由于您不能在 Sqlite 中存储 TimeSpan,因此我创建了一个 DateTime 类型的列名 EndDateTime。所以 Duration 是 EndDateTime 和 StartDateTime 之间的差异,如下所示:
StartDateTime = reader.GetDateTime(5);
Duration = reader.GetDateTime(6).Subtract(StartDateTime);