如何在SQLite中存储当前的语言环境日期和时间

时间:2015-02-24 17:30:17

标签: android sqlite date android-cursor

..然后检索并将它们显示为字符串?

我向用户询问了一些输入,我想要存储此输入提交的日期(即日,月和年)和时间(即一天中的小时)。然后,每个提交都保存在我的SQlite数据库中,稍后从RecyclerView

中检索

我至少面临两个问题。现在我在数据库中设置了两个TEXT字段,FIELD_DATEFIELD_TIME,我希望在其中存储日期和字段的字符串表示形式。时间,格式取决于Android用户区域设置。

根据我的阅读,android.text.format.DateFormat应该对我有所帮助。所以我设置:

java.text.DateFormat dateFormat = DateFormat.getMediumDateFormat(getActivity());
java.text.DateFormat timeFormat = DateFormat.getTimeFormat(getActivity());

现在我想我应该在两个对象上调用format(Date d)来获取我的字符串,但我不知道从哪里得到这个Date对象 - 甚至不知道是否我的两行是正确的。所以:

  • 如何获取当前日期和时间的字符串表示形式时间,基于用户定义的(在操作系统级别)区域设置?

那说(问),我想知道两个领域的日期和时间。时间真的是我正在寻找的。如上所述,最后我想展示一个RecyclerView读取数据库。在那里,我还需要根据日期筛选出条目,即

  

参考上周//上个月的参赛作品//全部   条目

所以我也问:

  • 双文字字段模式是存储日期和时间的正确选择吗?时间,因为需要轻松过滤出上周属于的条目?我应该更好地为日,月和年分别列?

  • 如果给定FIELD_DATE / FIELD_TIME结构(或您建议的任何其他更好的结构),如何查询数据库只有上周行?

我完全坚持这三个问题。


编辑:最后想出了如何获取我想要的字符串,它就像实例化一个新的Date对象一样简单:

Date d = new Date();
String date = DateFormat.getMediumDateFormat(getActivity()).format(d);
String time = DateFormat.getTimeFormat(getActivity()).format(d);

现在我有两个需要显示这些字符串(这很简单,因为它们已经格式化)并将一些过滤器应用于数据库,就像属于上周的条目(反过来,这将非常简单自1970年以来以当前时间为单位)。怎么办?

1 个答案:

答案 0 :(得分:1)

如果您希望能够运行复杂的查询,例如查找上周的所有记录,我建议您将时间戳存储为整数。时间戳表示为自Epoch(1970年1月1日)以来的毫秒数。它可以轻松地在确切的日期和时间范围内进行查询。 时间戳很容易从例如System.currentTimeMillis的()。

另一种方法是使用sqlite的内置日期类型,但我个人会选择时间戳方法。 你有什么理由想要以当前的语言环境格式存储它吗?如果您向用户显示日期,您最好将时间戳格式化为显示日期,使用Java和android的许多日期功能之一,例如java.util.Calendar,java.util.Date,android .text.SimpleDateFormat等。

例如,您可以运行此代码来获取本月开头的时间戳:

Calendar now = Calendar.getInstance();

now.set(Calendar.DAY_OF_MONTH, 1);
now.set(Calendar.HOUR_OF_DAY, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND,  0);

long startOfThisMonth = now.getTimeInMillis();    
相关问题