我的 Android 应用程序中有一个 SQLite 数据库,它将日期存储为整数。这些整数源自对
Java.util.Date.getTime();
的调用。我正在尝试运行数据库的原始查询,以将 Cursor 传递给 CursorAdapter 并显示在 ListView 中,但日期存储为由 getTime()
返回的整数。
为了保持程序简单,我想避免使用 SimpleArrayAdapter,而坚持使用 CursorAdapter。
是否可以以某种方式将日期列中的整数格式化为
mm-dd-yyyy
,以便光标指向的表格列包含格式正确的值,而不是我添加时由Java.util.Date.getTime();
返回的整数该项目到数据库?
SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col
如果您的代码需要采用名为 date_col 的格式的结果集列,则该代码将起作用。
编辑:您需要注意的一件事是 getTime 自 1970 年以来使用毫秒,而标准 UNIX 时间(包括 SQLite)使用秒。
Java.util.Date.getTime();
方法返回一个代表“unix time”的整数。
将此数字读取为日期的最简单方法是按原样存储它,并使用以下 Sqlite 查询读取它:
SELECT strftime('%m-%d-%Y', 1092941466, 'unixepoch');
返回:
08-19-2004
strftime
函数根据需要进行格式化,或任何其他可用的日期格式和函数。
正如 Matthew Flaschen 在下面的推荐中指出的那样,您必须将日期除以 1000,然后才能以这种方式使用它们。 “真实”unix 时间以自纪元以来的秒为单位进行测量,并且
Java.util.Date.getTime();
返回自纪元以来的 毫秒。
SQLite 使用静态刚性类型。使用静态类型,值的数据类型由其容器(存储该值的特定列)决定。
SQLite 数据库中存储的任何值都具有以下存储类别之一:
所以我不确定你的意思
but the date is stored as a long, unhelpful integer.
有关更多详细信息,请参阅SQLite 版本 3 中的数据类型。有关在 SQLite 中存储日期/时间的更多信息,请参阅 SQLite 所理解的 SQL。
我希望这有帮助。
我从 Excel 中得到的日期约为 45000,这是自 1970 年 1 月以来的天数。 以下是 SQLite 中对我有用的内容:
SELECT
strftime('%m-%d-%Y', ("Start Date"-25568)*86400, 'unixepoch') AS WeekStartDate,
strftime('%m-%d-%Y', ("End Date"-25568)*86400, 'unixepoch') AS WeekEndDate
FROM SalesByWeek