Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
在SQLite(Android)中使用字符串格式dd/MM/yyyy对列进行排序_Android_Sqlite_Android Studio - Fatal编程技术网

在SQLite(Android)中使用字符串格式dd/MM/yyyy对列进行排序

在SQLite(Android)中使用字符串格式dd/MM/yyyy对列进行排序,android,sqlite,android-studio,Android,Sqlite,Android Studio,我在一个Android项目中有一个SQLite数据库,其中有一个日期列,以dd-mm-yyy-HH-mm-ss格式将日期时间存储为字符串。我需要根据日期的降序排序。 或者,将其转换为标准的yyyy-MM-dd-HH-MM-ss格式,然后对其进行排序 按日期时间(coulmn_name)的常规顺序不起作用 注意: 这不是一个重复的问题,其他答案建议更改数据库模式(这是不可能的,因为我已经存储了数据)我想建议一种替代您正在采取的方法。我个人也遇到了同样的问题,并通过根本不使用字符串日期来解决它 相反

我在一个Android项目中有一个SQLite数据库,其中有一个日期列,以dd-mm-yyy-HH-mm-ss格式将日期时间存储为字符串。我需要根据日期的降序排序。 或者,将其转换为标准的yyyy-MM-dd-HH-MM-ss格式,然后对其进行排序

按日期时间(coulmn_name)的常规顺序不起作用

注意:


这不是一个重复的问题,其他答案建议更改数据库模式(这是不可能的,因为我已经存储了数据)

我想建议一种替代您正在采取的方法。我个人也遇到了同样的问题,并通过根本不使用字符串日期来解决它

相反,我将日期转换为unix时间戳并保存了它。然后,排序是按时间戳的简单顺序

您可以使用以下方法:

SimpleDateFormat sdf = new SimpleDateFormat ("dd-MM-yyyy HH:mm:ss");

Date currentDate = sdf.parse(yourdatestring);

//Get the calendar in the time zone you need, generally it works off the bat with the default time zone
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("yourtz"));

cal.setTime(currentDate);

//Get the milliseconds since epoch time
long millis = cal.getTimeInMillis();
您可以保存此时间戳并轻松对其进行排序。它将比字符串更准确、更易于使用,并可能使您能够处理不同的时区

您可以通过直接在日历中设置此时间戳并从中获取日期来检索日期

cal.setTimeInMillis(timestamp).getTime();

希望这对您有所帮助

我想建议您采取的另一种方法。我个人也遇到了同样的问题,并通过根本不使用字符串日期来解决它

相反,我将日期转换为unix时间戳并保存了它。然后,排序是按时间戳的简单顺序

您可以使用以下方法:

SimpleDateFormat sdf = new SimpleDateFormat ("dd-MM-yyyy HH:mm:ss");

Date currentDate = sdf.parse(yourdatestring);

//Get the calendar in the time zone you need, generally it works off the bat with the default time zone
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("yourtz"));

cal.setTime(currentDate);

//Get the milliseconds since epoch time
long millis = cal.getTimeInMillis();
您可以保存此时间戳并轻松对其进行排序。它将比字符串更准确、更易于使用,并可能使您能够处理不同的时区

您可以通过直接在日历中设置此时间戳并从中获取日期来检索日期

cal.setTimeInMillis(timestamp).getTime();

希望这能有所帮助,我想,它也比将日期存储在字符串中性能好得多。特别是对所述列进行排序和/或创建索引。这是否意味着数据库修改是不受欢迎的?他总是可以添加一列,而不是修改同一列。。。Ie不会弄乱数据,只需添加数据,模式更改是的。。。从长远来看更好是的。。。他的数据是否需要删除,否。我相信添加一个null或bigint列,并将已经存储的日期以这种格式放置,将是最佳处理的最佳选择。简言之继续执行您正在执行的操作,但将时间戳添加到所有现有和新数据中sets@Kushan好主意。但由于我在几个表中有多个日期列,所以这可能不可行。不过,我还是要试试看!我想,它的性能也比将日期存储在字符串中要好得多。特别是对所述列进行排序和/或创建索引。这是否意味着数据库修改是不受欢迎的?他总是可以添加一列,而不是修改同一列。。。Ie不会弄乱数据,只需添加数据,模式更改是的。。。从长远来看更好是的。。。他的数据是否需要删除,否。我相信添加一个null或bigint列,并将已经存储的日期以这种格式放置,将是最佳处理的最佳选择。简言之继续执行您正在执行的操作,但将时间戳添加到所有现有和新数据中sets@Kushan好主意。但由于我在几个表中有多个日期列,所以这可能不可行。不过,我还是要试试看!