Я храню поле 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);
) или запускаю запросы на моем ПК с помощью стето, результаты верны.
Любая помощь приветствуется.
1550591783
. И дело в том, что когда я запускаю запрос к базе данных приложения на моем компьютере (со стето), результат правильный. - person Mahozad   schedule 19.02.2019