..然后检索并将它们显示为字符串?
我向用户询问了一些输入,我想要存储此输入提交的日期(即日,月和年)和时间(即一天中的小时)。然后,每个提交都保存在我的SQlite数据库中,稍后从RecyclerView
。
我至少面临两个问题。现在我在数据库中设置了两个TEXT
字段,FIELD_DATE
和FIELD_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年以来以当前时间为单位)。怎么办?
答案 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();