Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java日期时间值从字符串到长字符串问题_Java_Android_String_Parsing_Datetime - Fatal编程技术网

Android java日期时间值从字符串到长字符串问题

Android java日期时间值从字符串到长字符串问题,java,android,string,parsing,datetime,Java,Android,String,Parsing,Datetime,长期读者,第一次海报 在安卓系统中,从datepicker中捕获日期并将其作为字符串存储在sqlite中。按日期排序不起作用,因为它们是字符串(除非我做错了) 我在谷歌上搜索了这个问题5天,看起来应该有办法从日期选择器中捕获日期,将其转换为Long,作为Long存储在sqlite中,选择Long date值并排序,然后将Long值转换回“mm/dd/yyyy”我尝试了各种解析语句、日期、格式化日期等组合,但一点运气都没有 我的实际申请流程是: 在活动开始时,获取今天的日期并将其显示在调用日期选择

长期读者,第一次海报

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

我在谷歌上搜索了这个问题5天,看起来应该有办法从日期选择器中捕获日期,将其转换为Long,作为Long存储在sqlite中,选择Long date值并排序,然后将Long值转换回“mm/dd/yyyy”我尝试了各种解析语句、日期、格式化日期等组合,但一点运气都没有

我的实际申请流程是: 在活动开始时,获取今天的日期并将其显示在调用日期选择器的按钮中。 从datepicker捕获新日期(如果已输入),将其保存为长到sqlite。 在打开显示记录列表视图的活动时,从日期为orderby(长)的sqlite中选择,将长转换为“mm/dd/yyyy”字符串以在列表视图中显示

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


Evan

java中的所有日期对象都只是幕后的长值。您可以使用getTime()从java日期对象获取长值,存储生成的长值,然后在构造函数中使用该长值初始化一个新的日期对象。由于DatePicker提供了日、月和年的接口,因此您应该使用java Calendar类作为过渡,创建一个新的日历对象,在提取日期对象之前设置日、月和年,然后设置长值来自日期对象的lue

我想说一些大致的话:

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();

从这里你可以序列化你的长值。很显然,为了逆转这个过程,你可以提取长值,用长值构造一个日期对象,然后使用日历。setTime(Date)在使用Calendar.get函数之前调用,以获取DatePicker.init函数上要使用的值,或者使用SimpleDateFormat对象以您描述的格式进行显示。我只使用日期,因为我认为日历对象对于此任务来说有点重。从日期选择器获取您的值:

public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
                updateDisplay();
            }
使用提供给日期选择器的整数创建日期:

Date date = new Date(mYear, mMonth, mDay);
然后按长值进行存储和排序:date.getTime()

或者,如果您确实必须使用字符串对日期进行排序,请将其格式化为yyyy/mm/dd格式以确保正确排序,即使这样,您也需要小心。我刚刚使用SimpleDataFormat进行了一些测试,它解析了不适当的日期字符串,例如2010/09/31被解释为2010/10/01。
当检查类似的内容时,我总是建议运行一些JUnit测试。

几个小时后,解决方案是混合给出的答案和其他一些东西:

// 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

论坛新手-我试着投票认为有用,但我还没有足够的声望点数。

按你的长值排序。在屏幕上显示时,使用此选项将长值转换为字符串:DateFormat df=New SimpleDateFormat(“MM/dd/yyyy”);Date d=New Date(myLong*1000L);String myDateFormmated=df.format(d);我的答案的附录。请记住,上面显示的日期构造函数已弃用,因此出于可移植性原因,您可能希望使用日历对象使用MattC的答案。请注意,日历的月份索引从0开始。