起初我想注意到英语不是我的母语,无论我希望我们不会误会
我在Android上编写了简单的应用程序,发现了一个问题,也解决了该问题,但是无论如何,我都想了解为什么会这样。
我创建了一个sql表:
public static final String CREATE_TABLE_ENTRIES = " CREATE TABLE " + TABLE_ENTRIES + " ( " + KEY_ID + " TEXT PRIMARY KEY, " + " content " + " TEXT, " + " title" + " TEXT, " + " image " + " TEXT, " + " date " + " INTEGER, " + ")";
并以这种方式将数据放入其中:
SQLiteDatabase db = mStorage.getWritableDatabase(); ContentValues tempValues = new ContentValues(); tempValues.put("id", entry.id); tempValues.put("content", entry.content); tempValues.put("title", entry.title); tempValues.put("image", entry.image); tempValues.put("date", entry.date); // int date; I use Unix time db.insert(contentType, null, tempValues);
现在..一切正常,我使用此应用程序进行了验证,可以存储的值正确。
不过,当我尝试使用cursor.getInt(cursor.getColumnIndex("date"))1得到错误的值2)获得日期值时,它的负数(例如-1004124)
cursor.getInt(cursor.getColumnIndex("date"))
因此,我尝试用getLong和voila替换它!我得到我的Unix时间。
问题是-这里的getInt有什么问题?
您确定使用的是unixtime(自纪元以来的秒数),而不是例如Java系统时间(自纪元以来的毫秒数)吗?
例如,unixtime非常1387233645适合32位int。
1387233645
但是,毫秒戳1387233645000对于32位而言太大。以十六进制表示0x142fd9191c8。取低32位,当解释为Java(即带符号的二进制补码32位整数)时,留给我们的0xfd9191c8是-40791608十进制int数。
1387233645000
0x142fd9191c8
0xfd9191c8
-40791608
int