2010-10-01 41 views
3

长时间阅读器,第一次海报。从String到Long到String的Android java日期时间值问题

在Android中,从datepicker中捕获日期并在sqlite中存储为字符串。按日期排序不起作用,因为它们是字符串(除非我做错了。)

我已将此问题搜索了5天,它看起来应该有一种方法来捕获日期日期选择器,将其转换为Long,将其作为Long存储在sqlite中,选择并排序Long日期值,然后将Long转换为“mm/dd/yyyy”字符串以进行显示。 。解析声明,日期,FormatDate等,没有运气可言的组合

我的实际应用流程将是: 在活动开始时,得到今天的日期和按钮,呼叫日期选择器显示它 捕捉新的日期。从datepicker(如果输入的话),将它保存为一个长的sqlite。 打开显示记录列表视图的活动时,从order by on date(Long)的sqlite中选择,将Long转换为“mm/dd/yyyy”字符串以在ListView中显示。

如果有人能指点我一个代码示例,将不胜感激 - 谢谢!

Evan

回答

1

java中的所有Date对象都只是后面的Long值。您可以使用getTime()从一个java Date对象中获取Long值,存储生成的long值,然后在构造函数中使用该long值初始化一个新的Date对象。由于DatePicker为Day,Month和Year提供接口,因此应该使用java Calendar类作为临时对象,方法是创建一个新的Calendar对象,在提取Date对象之前设置日期,月份和年份,然后设置Date对象的长整型值。

我想说的东西沿着这些路线:

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值拉出,使用long值构造Date对象,然后在使用Calendar.get函数获取要在DatePicker.init上使用的值之前使用Calendar.setTime(Date)调用函数,或利用SimpleDateFormat对象来获取它,以便按照您所描述的格式进行显示。

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测试。的头发拉后

+0

按您的长期价值排序。当在屏幕上显示时,使用它从long转换为String:DateFormat df = new SimpleDateFormat(“MM/dd/yyyy”);日期d =新日期(myLong * 1000L); String myDateFormmated = df.format(d); – Andrew 2010-10-01 21:24:02

+0

我的答案的附录。请记住,上面显示的Date构造函数已被弃用,因此出于便携性的原因,您可能希望使用Calendar对象使用MattC的答案。 – 2010-10-03 13:47:11

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 

新的论坛 - 我试着投了有用,但我还没有足够的声望点。

+0

请注意日历的月份索引从0开始。 – BalusC 2010-10-02 03:53:29

相关问题