如何比较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
Edit2 我刚刚发现,虽然这是不工作:
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'
有趣。
SQLite没有专门的存储类来存储日期和/或时间。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXT、REAL或INTEGER价值观:
文本为ISO8601字符串("YYYY-MM-DD HH:MM:SS.SSS")。真实的朱利安日数,即格林威治从11月的中午算起的天数公元前4714年24日,根据预言的公历。整数作为Unix时间,从UTC时间1970-01-01 00:00:00开始的秒数。应用程序可以选择在其中任何一种存储日期和时间格式和格式之间自由转换使用内置的日期和时间函数。
来源:sqllite.org
我的建议是将datetime值保存为整数。这样,你就不会有问题的操作,如比较。如果在查询中需要非数字日期,可以使用内置的Datetime函数,如下所示:
SELECT datetime(1092941466, 'unixepoch');