Android - как получить из Room объекты с значением timeStamp, принадлежащего к определенной дате
У меня в базе множество объектов Spend, дата которых указана в параметре timeStamp = Long (Юниксэпоха в секундах).
@Entity(tableName = "spend_table")
@Parcelize
data class Spend(
var sum: Float,
var category: Category?,
var timeStamp: Long = 0L,
@PrimaryKey(autoGenerate = true) val id: Int
) : Parcelable
Мне нужно, при нажатии на дату календаря, вызывать из Room все события этой даты (то так чтобы в SQL запросе не array из timestamp-ов от 00:00 до 23:59:59 вбивать, а запускать дату в какомто внятном формате). Подскажите пожалуйста, может какой best practice для этого есть. В каком виде лучше запускать дату в запрос, и как дать понять Room, что ему надо найти объекты, значение timeStamp которых находится внутри этой даты.
@Query("SELECT * FROM spend_table WHERE ...??...")
fun getTransactionsOfDate(...??...) : Flow<List<Transaction>>
Ответы (1 шт):
Данные в room хранятся в простом виде (текст, числа), следовательно необходимо будет преобразовать выбранную дату из DateTime полного формата 00:00 и 23:59 выбранной в picker в UnixTime и передать параметрами в запрос к БД.
@Query("SELECT * FROM spend_table WHERE timeStamp > :dateStart AND timeStamp < :dateEnd")
fun getTransactionsOfDate(dateStart: Long, dateEnd: Long) : Flow<List<Spend>>
@Query("SELECT * FROM spend_table WHERE timeStamp BETWEEN :dateStart AND :dateEnd")
fun getTransactionsOfDate(dateStart: Long, dateEnd: Long) : Flow<List<Spend>>