最近一直在學習Android,因爲Xana的Java徹底是半路出家,之前一直在用C#、C++和Python之類的東西,對於時間和日期的處理,一直沒能弄得比較清楚。html
SQLite中,原始的存儲只有如下幾種(SQLite文檔):java
Java中,時間和日期相關類主要是如下:sql
java.util.Date
和它的子類:數據庫
java.sql.Date
java.sql.Time
java.sql.Timestamp
以及相關的操做類:學習
java.util.Calendar
java.util.GregorianCalendar
其中,java.sql
下的Date
和Time
分別是「閹割」了的java.util.Date
,而java.sql.Timestamp
是強化版增長了微秒的java.util.Date
,綜上所述,通常而言,用java.util.Date
便可。編碼
Java中日期和時間都是經過1970年後的毫秒數來儲存的,因此,咱們在數據庫種只須要存儲日期時間
的毫秒數便可,調用code
java.util.Date date = new java.util.Date(); long datetime = date.getTime();
數據庫能夠這麼定義:sqlite
CREATE TABLE IF NOT EXISTS Journal( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT, writeTime INTEGER );
這個地方其實我被折騰了好久,由於Java中用long
來存儲毫秒數,即int64
,但SQLite中只有INTEGER
,後來看了文檔,這裏的INTEGER
是支持1-4字節,便可以存儲long
。htm
插入能夠這麼來:文檔
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<?", new String[] { String.valueOf(startTime), String.valuesOf(endTime) });