资讯专栏INFORMATION COLUMN

Android关于SQLite的日期时间的存储

lwx12525 / 1111人阅读

摘要:最近一直在学习,由于的完全是半路出家,以前一直在用和之类的东西,对于时间和日期的处理,一直没能弄得比较清楚。说清楚,中,原始的存储只有以下几种文档。有符号整数,根据值的大小存储在字节中。。浮点数,储存为字节的浮点数。。

最近一直在学习Android,由于Xana的Java完全是半路出家,以前一直在用C#、C++和Python之类的东西,对于时间和日期的处理,一直没能弄得比较清楚。

说清楚,SQLite

SQLite中,原始的存储只有以下几种(SQLite文档):

NULL。只有null。

INTEGER。有符号整数,根据值的大小存储在1-4字节中。

REAL。浮点数,储存为8字节的IEEE浮点数。

TEXT。文字字符串,根据数据库编码存储(UTF-8/UTF-16BE/UTF-16LE)

BLOB。纯数据储存。

Android和Java怎么做

Java中,时间和日期相关类主要是以下:

java.util.Date

和它的子类:

java.sql.Date

java.sql.Time

java.sql.Timestamp

以及相关的操作类:

java.util.Calendar

java.util.GregorianCalendar

用哪个?

其中,java.sql下的DateTime分别是“阉割”了的java.util.Date,而java.sql.Timestamp是强化版增加了微秒的java.util.Date,综上所述,一般而言,用java.util.Date即可。

怎么用?

Java中日期和时间都是通过1970年后的毫秒数来储存的,所以,我们在数据库种只需要存储日期时间的毫秒数即可,调用

java.util.Date date = new java.util.Date();
long datetime = date.getTime();

数据库可以这么定义:

CREATE TABLE IF NOT EXISTS Journal(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    content TEXT,
    writeTime INTEGER
);

这个地方其实我被折腾了很久,因为Java中用long来存储毫秒数,即int64,但SQLite中只有INTEGER,后来看了文档,这里的INTEGER是支持1-4字节,即可以存储long

插入可以这么来:

java.util.Date writeTime = new java.util.Date();
ContentValues values = new ContentValues();
values.put("content", content);
values.put("writeTime", writeTime.getTime());

按日期查找……WTF?

日期区间查找

由于在数据库内部使用了毫秒的方式储存时间日期,那对于某一个日期,比如2015-07-21这一天的内容如何查找?

其实也就是查找2015-07-21 00:00:00到2015-07-22 00:00:00之间的数值,我们造一个就是了。

首先,获取当前时间

Date now = new Date();

将它处理:

GregorianCalendar cal = new GregorianCalendar();
cal.setTime(now);
//可以根据需要设置时区
//cal.setTimeZone(TimeZone.getDefault());
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
//毫秒可根据系统需要清除或不清除
cal.set(Calendar.MILLISECOND, 0);
long startTime = cal.getTimeInMillis();

结束时间加上即可:

long endTime = startTime + 24 * 3600 * 1000;

现在就可以查询了:

Cursor cursor = db.rawQuery("SELECT * FROM Journal WHERE “ +
    ”writeTime>=? and writeTime           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64408.html

相关文章

  • Android存储方式之SQLite

    摘要:前言数据库操作在开发中非常常用今天我将带大家全面了解关于数据库的操作增删查改目录数据库介绍是内置的一个小型关系型属于文本型的数据库。提供了对数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。 前言 SQLite数据库操作在Android开发中非常常用 今天我将带大家全面了解关于SQLite数据库的操作(增、删、查、改) 目录 sho...

    rainyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<