在列表中返回日期时,是否可以格式化数据库中的日期?我目前有一个包含EntityScore的数据库。它包括一个日期。当我查询数据库以返回特定列表时,我想将日期作为格式化的字符串检索。
访问数据库:
val list: ArrayList<List<ScoresReport>> = arrayListOf()
for(i in 0 until listHeadings.size)
list.add(databasePersons.daoScores().getScoresDayPI(listHeadings[i].ID))
daoScores:
@Query("SELECT date as text, AVG(score) as score FROM ScoresTable WHERE personID =:personID")
fun getScoresDayPI(personID: Int) : List<ScoresReport>
得分报告:
class ScoresReport(var text: String, var score: Int)
{}
当我访问数据库以将Date作为文本返回列表中时,它以1970年的毫秒数形式出现。我希望它将日期格式设置为文本,但格式可能会根据用户的设置而改变。例如,用户可以选择他们希望其日期显示的模式。
这就是我想要的:
@Query("SELECT date as SimpleDateFormat(pattern).format(date) -> text, AVG(score) as score FROM ScoresTable WHERE personID =:personID")
fun getScoresDayPI(personID: Int) : List<ScoresReport>
答案 0 :(得分:1)
为此,您需要使用Chris Banes在this post中所述的TypeConverter
(我刚刚将其转换为Kotlin)
object DateConverter {
@TypeConverter
@JvmStatic
fun fromMillisToDate(millis: Long?): Date? {
return millis?.let {
return Date(millis)
}
}
@TypeConverter
@JvmStatic
fun fromDateToMillis(date: Date?): Long? {
return date?.time
}
}
然后,您需要使用Room
批注将其注册到TypeConverters
数据库实例中,以使其应用于数据库中的所有Date
对象。
@Database(
entities = [
User::class,
Todo::class,
],
version = 1
)
@TypeConverters(value = [DateConverter::class])
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
abstract fun todoDao(): TodoDao
}
请记住,使用
Date
存储日期或时间戳是不好的 如果需要考虑时区,请练习。如果是这种情况 最好使用OffsetDateTime
对象,并且所有 克里斯帖子中要做的必要步骤
答案 1 :(得分:0)
您可能需要解释模式,并提供类似于以下硬编码的格式字符串,但这应该可以让您了解正确的语法。
尝试将其更改为此:
@Query("SELECT strftime('%d-%m-%Y %H:%M:%S', date) as scoredate, AVG(score) as score FROM ScoresTable
WHERE personID =:personID")
或尝试:
@Query("SELECT strftime('%d-%m-%Y %H:%M:%S', date, unixepoch) as scoredate, AVG(score) as score FROM ScoresTable
WHERE personID =:personID")