场景
Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129322345
在上面Winform中操作Sqlite的基础上,存储数据时需要获取当前时间戳字符串进行存储。
然后在查询时筛选数据,比如查询是否是7天内的数据,就需要根据存储的时间戳字符串与
当前时间进行大小比较。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
1、获取当前时间戳字符串
public static String getCurrentTimeSpan() { TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); string timeSpan = Convert.ToInt64(ts.TotalSeconds).ToString(); return timeSpan; }
请注意:这里获取的单位是秒。
2、时间戳转换
从数据库中读取存储的时间戳字符串
long timestamp = long.Parse(reader.GetString(reader.GetOrdinal("timestamp")));
则可以直接使用long.Parse进行转换。
或者可以直接在数据库中存储long型数据,则取出时不需要进行转换。
3、时间戳大小比较
//判断时间戳与当前时间对比是否大于指定时长 public static bool filterTooLongDataWithNow(long oldTime, long threshold) { TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); long nowTimeSpan = Convert.ToInt64(ts.TotalSeconds); if (nowTimeSpan - oldTime > threshold) { return true; } else { return false; } }
这里是将数据库中存储的数据与当前时间戳进行大小比较,如果相差指定的threshold,则返回对应的判定结果。
调用示例:
//判断是7天内的数据再上传 long timestamp = long.Parse(reader.GetString(reader.GetOrdinal("timestamp"))); bool result = ConvertUtils.filterTooLongDataWithNow(timestamp, filterDateThreshold);
其中filterDateThreshold是7天
private long filterDateThreshold = 60 * 60 * 24 * 7;
业务逻辑示例
SQLiteDataReader reader = Global.Instance.sqlLiteHelper.ExecuteQuery("SELECT* FROM positions LIMIT 100;"); if (reader.HasRows) { while (reader.Read()) { //判断是7天内的数据再上传 long timestamp = long.Parse(reader.GetString(reader.GetOrdinal("timestamp"))); bool result = ConvertUtils.filterTooLongDataWithNow(timestamp, filterDateThreshold); //7天之前的数据直接删除 if (result) { //删除数据 Global.Instance.sqlLiteHelper.ExecuteQuery("DELETE FROM positions WHERE timestamp = " + reader.GetString(reader.GetOrdinal("timestamp")) + ";"); }//如果是7天内数据,则断线上传之后再删除 else { } } }
标签:Sqlite,timestamp,Winfrom,CSharp,存储,long,时间,reader,数据 From: https://www.cnblogs.com/badaoliumangqizhi/p/17182772.html