在 SQLite select 语句中将整数格式化为格式化日期

问题描述 投票:0回答:4

我的 Android 应用程序中有一个 SQLite 数据库,它将日期存储为整数。这些整数源自对

Java.util.Date.getTime();
的调用。我正在尝试运行数据库的原始查询,以将 Cursor 传递给 CursorAdapter 并显示在 ListView 中,但日期存储为由
getTime()
返回的整数。

为了保持程序简单,我想避免使用 SimpleArrayAdapter,而坚持使用 CursorAdapter。

是否可以以某种方式将日期列中的整数格式化为

mm-dd-yyyy
,以便光标指向的表格列包含格式正确的值,而不是我添加时由
Java.util.Date.getTime();
返回的整数该项目到数据库?

android sqlite
4个回答
12
投票
SELECT strftime("%m-%d-%Y", date_col, 'unixepoch') AS date_col

如果您的代码需要采用名为 date_col 的格式的结果集列,则该代码将起作用。

编辑:您需要注意的一件事是 getTime 自 1970 年以来使用毫秒,而标准 UNIX 时间(包括 SQLite)使用秒。


5
投票

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();
返回自纪元以来的 毫秒


2
投票

SQLite 使用静态刚性类型。使用静态类型,值的数据类型由其容器(存储该值的特定列)决定。

SQLite 数据库中存储的任何值都具有以下存储类别之一:

  1. 整数
  2. 真实
  3. 文字
  4. 斑点

所以我不确定你的意思

but the date is stored as a long, unhelpful integer.

有关更多详细信息,请参阅SQLite 版本 3 中的数据类型。有关在 SQLite 中存储日期/时间的更多信息,请参阅 SQLite 所理解的 SQL

我希望这有帮助。


0
投票

我从 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 
© www.soinside.com 2019 - 2024. All rights reserved.