Как искать определенную c дату после преобразования даты в метку времени и сохранения ее в SQLite - PullRequest
0 голосов
/ 08 января 2020

Я получаю timeInMillis календаря и сохраняю его в SQLite.

Мой код выглядит следующим образом:

fun insertExerciseModel(exerciseModel: ExerciseModel) {
    val exerciseContentValue = ContentValues()
    ...
    exerciseContentValue.put(Contract.ExerciseEntry.CALENDAR, exerciseModel.calendar.timeInMillis)
    ...
    writableDatabase.insert(
        Contract.ExerciseEntry.TABLE_NAME_EXERCISE,
        null,
        exerciseContentValue
    )

    ...
}

Я могу искать все строки из таблицы и порядок по календарю.

SELECT * FROM Contract.ExerciseEntry.CALENDAR ORDER BY calendar

Однако данные INTEGER type и это timeInMillis.

Как найти определенную c дату, например, 8 января 2020 года?

Или какую команду я могу дать после WHERE?

Ответы [ 3 ]

3 голосов
/ 08 января 2020

Вы можете использовать функцию DATETIME для преобразования миллисекунд вашей таблицы с эпохи в дату и время ISO. Затем просто сравните это с литералом даты, который вы хотите:

SELECT *
FROM Contract.ExerciseEntry.CALENDAR
WHERE
    DATETIME(ROUND(calendar / 1000), 'unixepoch') >= '2020-01-08' AND
    DATETIME(ROUND(calendar / 1000), 'unixepoch') <  '2020-01-09'
ORDER BY
    calendar;
1 голос
/ 08 января 2020

Вы можете получить дату в миллисекундах с помощью strftime():

strftime('%Y-%m-%d', miliseconds / 1000, 'unixepoch')

, поэтому вам нужно выражение sql, например:

val sql = "SELECT * FROM ${Contract.ExerciseEntry.CALENDAR} WHERE strftime('%Y-%m-%d', datecolumnname / 1000, 'unixepoch') = '2020-01-08'"
1 голос
/ 08 января 2020

Попробуйте,

    try {
        val dateFormat = SimpleDateFormat("MMMM dd, yyyy")
        val parsedDate = dateFormat.parse("January 8, 2020")
        // thats the value you will search for in the database
        // parsedDate.getTime();
    }catch (  e:java.lang.Exception){ //this generic but you can control another types of exception
// look the origin of excption
    }
...