在SQLIte中用于存储Time Taken字段的数据类型是什么?

时间:2013-08-19 06:31:15

标签: c# sqlite time

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

3 个答案:

答案 0 :(得分:5)

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

在SQLite中,您应该存储INTEGER类型,以便您的数据可以排序。您只需确定所需的粒度。

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

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

答案 1 :(得分:0)

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

在SQLite中,可能的数据类型包括TEXTINTEGERREALBLOB(相当于.NET StringInt64,分别为DoubleByte数组。)

您所要做的就是将C#DateTimeTimeSpan操作为您首选的SQLite数据类型。

答案 2 :(得分:0)

我认为@Matt Johnson的答案是最有代表性的,但我提出了另一种方法。就我而言,问题有点不同。我不得不预订一家餐馆,其中包括这两个领域:

  • DateTime StartDateTime

  • TimeSpan持续时间

由于您无法在Sqlite中存储TimeSpan,因此我创建了一个类名为DateTime的列名EndDateTime。所以持续时间是EndDateTime和StartDateTime之间的差异,如下所示:

StartDateTime = reader.GetDateTime(5);
Duration = reader.GetDateTime(6).Subtract(StartDateTime);