【问题标题】:Outputting specific rows from SQL database using Date format使用日期格式从 SQL 数据库输出特定行
【发布时间】:2012-03-30 11:41:25
【问题描述】:

我正在编写一个应用程序,用户可以在其中将一些详细信息输入 SQLite 数据库。我需要编写代码,输出数据库中最近 31 天的存储数据。

保存日期字符串的代码是: currentDateString = DateFormat.getDateInstance().format(new Date());

这以 2012 年 3 月 30 日的格式(今天的日期)给出日期。

是否可以将此数据格式更改为 DD/MM/YYYY? (30/03/2012)

该字符串保存到 SQL 数据库中,如下所示:

ContentValues dbcv = new ContentValues(); dbcv.put(KEY_DATE, 日期);

(currentDateTime String = 上一课的日期)

我希望输出过去 31 天内数据库的每一行。

我该怎么做?

谢谢!

【问题讨论】:

  • 有更好的替代方法来存储时间信息,例如使用 Unix 时间而不是字符串:sqlite.org/datatype3.html
  • 为什么要将日期存储为字符串?
  • @njzk2 因为我对 eclipse 和 android 以及 Java 本身都是全新的,因为我的整个课程都基于 Delphi 和 Pascal。

标签: android sql eclipse date


【解决方案1】:

首先,你是在做两个问题,而不是一个,我会尽量给你一个答案。

  1. 要更改 java 中的日期格式,请查看SimpleDateFormat 的文档,您可以将模式传递给该类的构造函数,使其按照您真正想要的方式格式化您的日期。在您的特定情况下,您正在寻找的模式是dd/MM/yyyy
  2. 如果您在数据库中将日期存储为字符串,则会失去按原样存储日期所具有的一些好处。例如,如果您在表中存储日期而不是字符串,则您的第二个问题将很容易执行,因为您唯一需要实现的就是使用 SQLLite 提供的日期函数对您的表执行 select 操作.看看这个网页,因为它会让您了解您可以使用这些功能做什么:SQLLite Date Functions

注意:当然,如果您仍想将它们存储为字符串,您将拥有的唯一解决方案是读取所有记录,将所有字符串解析回日期并使用 java.util.Calendar 类检查哪条记录超过 31 天,哪条不是。我宁愿做 SQL 查询而不是那个,因为它有更好的性能(特别是在移动设备上)。

编辑

SQLLite 和 Android 并不是我的专长,我做了一个小型研究,发现了几篇文章,其中人们实际上将它们存储为字符串,就像你最初开始做的那样。如果 Android 上的 SQLLite 不支持按原样存储日期(与其他数据库一样),那么您方案中的最佳选择可能是使用 long 值作为日期。查看 Date 定义类,它有一个方法 getTime 将日期值作为 long 值返回,您可以稍后使用该值创建一个新的日期实例(使用其构造函数)。

要将日期(当然是Date 对象)格式化为用户可读的格式,DateFormat(或其任何实现)仍然是答案。

要执行将日期存储为 long 的查询,我建议您查看 Apache Commons Lang library 中的 DateUtils 类。在该类中,您会发现几个适用于日期的函数,因此,在创建查询之前,您需要获取最近 31 个日期中的行,您可以使用以下内容:

Date now = new Date();
Date before = DateUtils.addDays(now, -31);
long beforeAsLong = before.getTime();
String query = "select * from TABLE_NAME where DATE_FIELD >= " + beforeAsLong;

希望这会有所帮助。

【讨论】:

  • 看看 SQLite 函数,我如何将它们保存为与 SQL 数据库兼容的日期?
  • 另外,在将它们读入字符串方面,不幸的是我对这门语言完全陌生,所以以实际日期格式保存对我来说听起来很棒!
  • 我编辑了我的答案,因为我无法添加这么多信息作为评论。看看它,希望它有所帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2018-03-17
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多