Я сохраняю поле 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.getInstance().get(Calendar.DAY_OF_YEAR);
) или запускаю запросы на моем компьютере с помощью stetho, результаты верны.
Любая помощь приветствуется.