android - 在 Android SQLite 中处理日期的最佳方式

标签 android sql database sqlite date

我在使用 SQLite 的 Android 应用程序上处理日期时遇到了一些问题。 我有几个问题:

  1. 我应该使用什么类型在 SQLite 中存储日期(文本、整数、...)?
  2. 鉴于存储日期的最佳方式,我如何使用 ContentValues 正确存储它?
  3. 从 SQLite 数据库中检索日期的最佳方法是什么?
  4. 如何在 SQLite 上进行 sql 选择,按日期排序结果?

最佳答案

最好的方法是将日期存储为数字,使用日历命令接收。

//Building the table includes:
StringBuilder query=new StringBuilder();
query.append("CREATE TABLE "+TABLE_NAME+ " (");
query.append(COLUMN_ID+"int primary key autoincrement,");
query.append(COLUMN_DATETIME+" int)");

//And inserting the data includes this:
values.put(COLUMN_DATETIME, System.currentTimeMillis()); 

为什么要这样做?首先,从日期范围中获取值很容易。只需将您的日期转换为毫秒,然后进行适当的查询。按日期排序同样容易。正如我所包括的那样,在各种格式之间转换的调用也同样容易。底线是,使用这种方法,您可以做任何您需要做的事情,没有问题。读取原始值会有点困难,但它通过易于机器读取和使用来弥补这个轻微的缺点。事实上,构建一个阅读器(我知道那里有一些)相对容易,它会自动将时间标签转换为日期,以便于阅读。

值得一提的是,由此得出的值应该是long,而不是int。 Integer in sqlite可能意味着很多东西,从 1 到 8 个字节不等,但对于几乎所有日期来说,64 位或很长,是有效的。

编辑:正如评论中所指出的,如果你这样做,你必须使用 cursor.getLong() 来正确获取时间戳。

关于android - 在 Android SQLite 中处理日期的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363112/

相关文章:

android - 设置 onClickListener 和制作 xml android :onclick attribute related method? 之间有什么区别

mysql - 创建用户到组的映射,并根据用户组合获取组

java - 从 C++ 获取 Java 中的 Struct 对象

Android Studio CMake - 共享库缺少 libc++_shared.so? CMake 可以 bundle 这个吗?

View.getLeft() 与 View.getScrollX() 之间的区别

iphone - Xcode 4 和数据库

Phpmyadmin 没有显示 mysql 数据库中的所有表

sql - 查询以根据今天的日期返回具有连续日期的行

database - 强制 postgres 转储使用复制而不是插入

database - 需要一个字段/标志/状态编号以供多次使用?