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