【发布时间】:2019-02-19 16:12:15
【问题描述】:
我将date 字段存储在数据库中作为自纪元以来的秒数:
对于图像中的时间戳(1550591783——代表2019-02-19 19:26:23),sqlite 应返回 50 作为一年中的某一天,但它返回 40。
这是PurchaseDao中的查询:
@Query("SELECT strftime('%j', date, 'unixepoch', 'localtime') AS day " +
"FROM purchase " +
"WHERE ...")
abstract List<Cost> getCosts();
这是日期转换器:
public class DateConverter {
@TypeConverter
public static Date fromTimestamp(Long value) {
return value == null ? null : new Date(value * 1_000); // multiply by 1000 to make it milliseconds
}
@TypeConverter
public static Long toTimestamp(Date date) {
return date == null ? null : date.getTime() / 1_000; // divide by 1000 to store as seconds
}
}
即使我将now 作为参数传递给查询(实际上我什至将它应用到一个新的方法中而没有任何其他干扰)我得到同样的错误结果:
@Query("SELECT strftime('%j', 'now', 'localtime')")
我尝试删除 'localtime' 参数,更改日期转换器以将日期存储为字符串(例如格式为 2019-02-19)并在 AVD 中运行应用程序,但在所有情况下我都得到相同的错误结果。
另一方面,当我使用 Calendar (Calendar.getInstance().get(Calendar.DAY_OF_YEAR);) 获取一年中的某一天或使用 stetho 在我的 PC 中运行查询时,结果是正确的。
任何帮助表示赞赏。
【问题讨论】:
-
您确定这是正在评估的时间戳吗?如果对查询中的时间戳进行硬编码,是否会得到相同的结果?
-
@GabrielNegut 是的,我用硬编码的
1550591783得到了相同的结果。问题是,当我在我的 计算机(使用 stetho)上的应用程序数据库上运行查询时,结果是正确的。
标签: android sql sqlite android-room strftime