4

我想在 SQLite DB(使用 C#)中创建一个字段来存储所用时间(持续时间)字段。该值将采用hr:min:sec格式,例如'10:10:00'表示 10 小时、10 分钟和 00 秒。我应该为此使用哪种数据类型?我知道DateTime这还不够,因为它用于存储日期时间。

4

3 回答 3

5

TimeSpan在 C# 中使用 a 。这意味着表示经过的持续时间,这就是您所描述的。

在 SQLite 中,您应该存储一个INTEGER类型,以便您的数据是可排序的。你只需要决定你需要什么粒度。

例如,TimeSpan.Ticks如果您关心尽可能精确的绝对精度,您可以存储 。为此,您需要INTEGER8 个字节。加载时,您可以使用TimeSpan.FromTicks或构造函数new TimeSpan(ticks)

更有可能的是,您需要存储整数秒,您可以从TimeSpan.TotalSeconds. 您可能会INTEGER为此使用 4 个字节。加载时,您可以使用TimeSpan.FromSeconds整数重新创建时间跨度。

于 2013-08-19T13:59:11.113 回答
1

DateTimeorTimeSpan会绰绰有余,但 SQLite 不支持它们。

在 SQLite 中,可能的数据类型是TEXTINTEGER和(分别相当于 .NET 、REAL和数组)。BLOBStringInt64DoubleByte

您所要做的就是操作您的 C#DateTimeTimeSpan您喜欢的 SQLite 数据类型。

于 2013-08-19T08:37:17.197 回答
0

我认为@Matt Johnson 的答案是最合适的,但是,我提出了另一种方法。就我而言,问题有点不同。我必须存储餐厅的预订信息,其中包括以下两个字段:

  • 日期时间开始日期时间

  • 时间跨度持续时间

由于您不能在 Sqlite 中存储 TimeSpan,因此我创建了一个 DateTime 类型的列名 EndDateTime。所以 Duration 是 EndDateTime 和 StartDateTime 之间的差异,如下所示:

StartDateTime = reader.GetDateTime(5);
Duration = reader.GetDateTime(6).Subtract(StartDateTime);
于 2016-11-18T16:28:42.490 回答