DateUtils.getRelativeTimeSpanString Возвращение форматированной строки даты вместо "Часы / Минуты назад"

У меня возникли серьезные проблемы при попытке получить DateUtils.getRelativeTimeSpanString, чтобы вернуть то, что он должен в Android.

Я рассмотрел все подобные вопросы здесь, и ни одно из опубликованных решений не работает и не имеет отношения к делу.

Вот мой код:

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(System.currentTimeMillis(), 
            currentNewsItem.getTimeInMilliseconds(), 
            DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
            dateView.setText(relativeDate);

Метод currentNewsItem.getTimeInMilliseconds действительно возвращает long (например, только что он прошел 1521759734 что кажется правильным), и getRelativeTimeSpanString передает правильно отформатированную строку даты представлению в формате "23 марта 2018 года", чтобы оно знало правильную дату. Но мне нужно, чтобы он пропустил "х часов назад" или "х минут назад", и я не могу понять, почему это не так.

Я проверил время на эмуляторе, и проблема возникает на моем устройстве, поэтому это не настройки часового пояса.

Документация говорит, что она вернется к такой строке даты, если промежуток времени больше 7 дней, но я проверил, сколько времени прошло, как старое время, и сайты конвертеров показывают, что это точное время 4 часа назад. Кроме того, он показывает правильную дату (сегодня), а не часы / минуты назад.

Я попробовал константы HOUR_IN_MILLIS, MINUTES_IN_MILLIS и SECONDS_IN_MILLIS для третьего параметра, и я попытался удалить последний параметр аббревиатуры, и это все тот же результат.

Я пробовал различные сигнатуры публичных методов, чтобы попытаться найти такую, которая могла бы работать, но все они имеют одинаковый результат.

Кто-нибудь сталкивался с этим или кто-то может указать, где я иду не так? Большое спасибо.

1 ответ

Если вы проверите DateUtils.getRelativeTimeSpanString параметры указаны как:

getRelativeTimeSpanString (long time, 
            long now, 
            long minResolution, 
            int flags)

Однако в вашем коде,
now: текущее время в миллисекундах, передается как 1-й параметр вместо currentNewsItem.getTimeInMilliseconds(),

Чтобы получить относительное время, как X минут назад, вы можете использовать DateUtils.MINUTE_IN_MILLIS и флаг как DateUtils.FORMAT_ABBREV_RELATIVE будет сокращать относительное время как X мин. назад

Итак, вы можете изменить свой код на:

CharSequence relativeDate = 
DateUtils.getRelativeTimeSpanString(currentNewsItem.getTimeInMilliseconds(), 
        System.currentTimeMillis(),
        DateUtils.MINUTE_IN_MILLIS,
        DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);
Другие вопросы по тегам