长期读者,第一次海报。
在Android中,从datepicker捕获日期并在sqlite中存储为字符串。按日期排序不起作用,因为它们是字符串(除非我做错了。
我已经用Google搜索了这个问题大约5天了,看起来应该有办法从日期选择器中捕获日期,将其转换为Long,将其存储在sqlite中作为Long,选择并排序长日期值,然后将Long转换回“mm / dd / yyyy”字符串进行显示。我已经尝试了各种解析语句,Date,FormatDate等组合,根本没有运气。
我的实际应用流程是: 在活动开始时,获取今天的日期并将其显示在调用datepicker的按钮中。 从datepicker中捕获新日期(如果输入了一个日期),将其保存为long to sqlite。 在打开显示记录列表视图的活动时,从日期(长)的orderby中选择sqlite,将Long转换为“mm / dd / yyyy”字符串以在ListView中显示。
如果有人能指出我的代码示例,我们将不胜感激 - 谢谢!
埃文
答案 0 :(得分:2)
稍后的时间,这个解决方案是给出的答案和其他一些东西的混合:
// variables declared
private int mYear;
private int mMonth;
private int mDay;
// datepicker declared and listened for
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
};
// converting the datestring from the picker to a long:
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, mDay);
c.set(Calendar.MONTH, mMonth);
c.set(Calendar.YEAR, mYear);
Long lDate = c.getTime().getTime();
//The formatting that worked on the trip back from long to string
// (I spent hours with SimpleDateFormat strings, years that were off by 1500, etc.):
String DateFormatted = DateFormat.getDateFormat(getApplicationContext()).format(helper.getDate(c)); // helper.getDate(c) is just the passing back of the Long date from my SELECT statement
论坛新手 - 我尝试投票有用,但我还没有足够的声誉点。
答案 1 :(得分:1)
java中的所有Date对象都是幕后的Long值。您可以使用getTime()从java Date对象获取Long值,存储生成的long值,然后在构造函数中使用该long值初始化新的Date对象。由于DatePicker提供了日,月和年的接口,因此您应该通过创建新的Calendar对象来使用java Calendar类作为临时对象,在提取Date对象之前设置日,月和年,然后从Date对象设置long值。
我会说这些话:
DatePicker dp = blah blah;
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, dp.getDayOfMonth());
c.set(Calendar.MONTH, dp.getMonth());;
c.set(Calendar.YEAR, dp.getYear());
long l = c.getTime().getTime();
从此处您可以序列化您的长值。显然,然后反转你拉长值的过程,构造一个具有long值的Date对象,然后使用Calendar.setTime(Date)调用,然后使用Calendar.get函数获取要在DatePicker.init上使用的值函数,或利用SimpleDateFormat对象准备好以您所描述的格式显示。
答案 2 :(得分:1)
我只是使用日期,因为我认为日历对象对于此任务来说有点沉重。从DatePicker获取您的值:
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
使用提供给DatePicker的整数来创建日期:
Date date = new Date(mYear, mMonth, mDay);
然后按长值存储和排序:date.getTime()。
或者,如果您确实必须使用字符串来排序日期,请以yyyy / mm / dd格式对其进行格式化以确保正确排序,即使这样您也需要注意。我刚刚用SimpleDateFormat做了一些测试,它解析了不合适的日期字符串,例如2010/09/31被解释为2010/10/01。 在检查这样的东西时,我总是建议运行一些JUnit测试。