本文主要是在notepad中实现时间戳的一些见解和问题的解决。
时间戳的显示实现
在notepad源码中我可以看到数据库中已经存在了COLUMN_NAME_CREATE_DATE(创建的时间),COLUMN_NAME_MODIFICATION_DATE(修改的时间)都已经在数据库中。
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE " + NotePad.Notes.TABLE_NAME + " (”
+ NotePad.Notes._ID + " INTEGER PRIMARY KEY,"
+ NotePad.Notes.COLUMN_NAME_TITLE + " TEXT,"
+ NotePad.Notes.COLUMN_NAME_NOTE + " TEXT,"
+ NotePad.Notes.COLUMN_NAME_CREATE_DATE + " INTEGER,"
+ NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE + " INTEGER"
+ “);”);
}
之后我们就需要在创建和修改的时候对数据库中的时间进行相应的显示。
对应地点就是在在NotePadProvider的insert函数中。
Long now = Long.valueOf(System.currentTimeMillis());
if (values.containsKey(NotePad.Notes.COLUMN_NAME_CREATE_DATE) == false) {
values.put(NotePad.Notes.COLUMN_NAME_CREATE_DATE, now);
}
// If the values map doesn’t contain the modification date, sets the value to the current time.
if (values.containsKey(NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE) == false) {
values.put(NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE, now);
}
我们需要新建一个dateTime(如下)来替换上面的now。
//转化时间格式
Date date = new Date(now);
SimpleDateFormat format = new SimpleDateFormat(“yy.MM.dd HH:mm:ss”);
String dateTime = format.format(date);
接着需要在NotesList的数据定义中增加修改时间
private static final String[] PROJECTION = new String[] {
NotePad.Notes._ID, // 0
NotePad.Notes.COLUMN_NAME_TITLE, // 1
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE,//在这里加入了修改时间的显示
};
最后装配的时候需要装配相应的日期,所以dataColumns,viewIDs这两个参数需要加入时间
String[] dataColumns = {
NotePad.Notes.COLUMN_NAME_TITLE,
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE//增加时间参数
} ;
int[] viewIDs = {
android.R.id.text1,android.R.id.text2};
实现图如下:
这时候你会发现时间与现实时间不符,并且相差8小时!!
这时你需要去NotePadProvider的insert函数中添加如下内容:
format.setTimeZone(TimeZone.getTimeZone(“GMT”));
然后在去手机的设置里面把时间的时区改了就可以了。
作者:黄贞羽
原文地址