Android的Sqlite中DateTime類型資料的存取問題
關於講sqlite中日期類型資料的存取網上有不少,但發現講得這麼細的非常少。更多的是用Date,不用做日期資料統計分析,對存取要求比較小的直接轉換成long,即dateTime.getTime()儲存。需要在介面上顯示的時候就再將long型的日期資料轉化為Date或DateTime類型。但是如果要做資料統計分析的話這樣每條記錄都要遍曆轉換會顯得特別麻煩,資料量大的話時間消費是很大的。
我們知道Date類型資料在資料庫中是yyyy-MM-dd形式存的,而Time是HH:mm形式存的。而DateTime類型的儲存方式是yyyy-MM-dd HH:mm:ss.fff,有年、月、日、時、分、秒、毫秒。這樣DateTime類型的資料怎麼存?相信是個困擾初學者的問題。
String timeStr = “2015-3-1 16:20”; SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); format.setTimeZone(TimeZone.getTimeZone(GMT+08:00));// 中國北京時間,東八區 Date dateTime = null; try { dateTime = (Date) format.parse(timeStr); } catch (ParseException e) { e.printStackTrace(); }
java.sql.Date是為了配合SQL DATE而設定的資料類型。“正常化”的java.sql.Date只包含年月日資訊,原因是如果資料庫中存在的非正常化部分的資訊如時分秒毫秒都會劫取清零。
要儲存java.util.Date的精確值,
我們需要利用java.sql.Timestamp
Timestamp timestamp = new Timestamp(dateTime.getTime());
這樣就可以直接用timestamp向sqlite中插入DateTime類型的資料了。
那取呢?關鍵問題應該出現在遊標中沒有專門取日期資料的方法。
注意,Android的Sqlite中的資料是弱類型儲存的。以String取出,再轉化成日期類型的。
String str; SimpleDateFormat format; Date date = null; str = cursor.getString(cursor.getColumnIndex(相應的列名)); format = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); date = (Date) format.parse(str);