在C#中比较SQLite时间戳和日期时间

3
我如何将SQLite的时间戳与C#的DateTime进行比较? 我有以下代码:
string query = string.Format(@"select avg(CPUH_VALUE_ALL) as Value from CPU_HOUR where CPUH_DATE >= @Date");
var pars = new List<SQLiteParameter>();
pars.Add(new SQLiteParameter("Date", DateTimeSQLite(DateTime.Now.AddMinutes(-12))));

在哪里

static string DateTimeSQLite(DateTime datetime)
{
    string dateTimeFormat = "{0}-{1}-{2} {3}:{4}:{5}.{6}";
    return string.Format(dateTimeFormat, datetime.Year, datetime.Month, datetime.Day, datetime.Hour, datetime.Minute, datetime.Second, datetime.Millisecond);
}

那样行不通。我尝试使用各种格式的日期字符串值与时间戳进行比较时,也没有任何有效的结果。有什么线索吗? 编辑
select CPUH_DATE from CPU_HOUR where CPUH_DATE

获取类似以下的记录:
5/19/2014 9:30:54 PM

编辑2 我刚刚发现这个不起作用:

select * from CPU_HOUR where CPUH_DATE >= '2014-5-19 21:30:08' 

这是(请注意5前面的零):

select * from CPU_HOUR where CPUH_DATE >= '2014-05-19 21:30:08' 

有趣。

当您选择CPUH_DATE时,您获取的日期格式是什么?您能否将其添加到问题描述中? - SoftwareFactor
1个回答

4

SQLite没有专门用于存储日期和/或时间的存储类。相反,SQLite内置的日期和时间函数可以将日期和时间存储为TEXT、REAL或INTEGER值:

TEXT作为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS")。REAL作为儒略日数字,即格林威治时间1970年11月24日中午以来的天数,根据推测公历历法,INTEGER作为Unix时间,即自协调世界时1970年01月01日00:00:00以来的秒数。应用程序可以选择使用这些格式之一存储日期和时间,并使用内置的日期和时间函数自由地在各种格式之间进行转换。

来源:sqllite.org

我的建议是将日期时间值保存为整数。这样,您就不会遇到比较等操作的问题。如果您需要在查询中使用非数字日期,可以像这样使用内置的Datetime函数:

SELECT datetime(1092941466, 'unixepoch');

2
以防万一,如果有人想要将由.Net代码生成的DateTime(在SQLite中存储为bigint)进行转换:select datetime(lastModified/10000000 - 62135596800, 'unixepoch') from YourTable更多信息请参见:链接 - Ryan Russon
对于使用c#的开发人员,请查看Ryan Russon的答案。 至于我的情况,我正在Xamarin项目中使用SQLite-net库,该库具有在sqllite DB中创建表的内置方法(我的自动生成的表具有DateTime字段)。当查询语句“Date(mycolumnDatetime)”时,将得到空值! - user3682728

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接